javascript - 使用 Protractor 将 pdf 保存到文件

标签 javascript pdf selenium-webdriver browser protractor

我需要将 pdf 保存到文件。问题是,单击页面上的 Print 按钮后,它会将我重定向到其中包含 pdf 的新页面。这对用户来说很好,因为它是标准的 chrome pdf 查看器,但问题是我无法单击 download 按钮,因为我能看到的唯一 html 是:

<body style="background-color: rgb(38,38,38); height: 100%; width: 100%; overflow: hidden; margin: 0">
     <embed width="100%" height="100%" name="plugin" id="plugin" src="blob:https://myPage.com/e8aa96bf-5a46-4f74-8df6-424881a8774a" type="application/pdf" internalinstanceid="34" title="">
</body>

有人知道如何在 Protractor 中下载 pdf 吗?

最佳答案

保存 pdf 涉及使用 HTML 5 download属性。我们可以创建一个a当我们点击它时,该元素将为我们保存 pdf。

基本上我们需要创建自己的<a download="ourfile.pdf" href="blob:ourPath">哪里download是我们要保存的文件的名称,href是我们的pdf的url ,或src embed 的属性。

我们可以使用 browser.driver.executeScript(); 创建这个元素。所以我们可以创建这样的东西:

browser.getAllWindowHandles().then(function (handles) {
    browser.switchTo().window(handles[1]).then(function () {
        browser.ignoreSynchronization = true;
        browser.driver.executeScript(`var a = document.createElement('a');
                                      a.href = arguments[0];
                                      a.id="downloadPdf";
                                      a.download = "abc.pdf";
                                      a.text="DOWNLOAD"
                                      a.style="width:200px;height:200px;"
                                      var b = document.getElementsByTagName('body')[0];
                                      b.insertBefore(a, b.firstChild);
                                      `,
            browser.driver.getCurrentUrl()).then(() => {
                browser.driver.findElement(by.id('downloadPdf')).click();
                browser.ignoreSynchronization = false;
            });
    });
});

我们通过url使用第二个参数并将新元素插入为 body 的第一个元素。然后我们找到新创建的元素并单击。

我们还可以指定文件的保存路径。这是通过设置default_directory来完成的。在我们的配置文件中。

  capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
      prefs: {
            'download': {
                'prompt_for_download': false,
                'default_directory': 'C:\\your\\custom\\path\\',
            }
        }
    },
  }

关于javascript - 使用 Protractor 将 pdf 保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42436784/

相关文章:

javascript - watir ruby​​ 文件上传 windows 交互

javascript - Parse.User.Login 不是函数?

javascript - ASP .NET On_Load 方法未执行

excel - 从 PDF 和 Excel 中抓取数据

python - 无法在python中使用FPDF打印特定字符

azure - BrowserStack 和 Azure 集成和运行测试

java - Selenium 网络驱动程序 : Extracting strings in a search result using a loop

javascript - 递归的子集和 - 我做错了什么?

c# - 从 .NET 应用程序静默打印 PDF 文件

python - scrapy 抓取一组可能包含下一页的链接