我正在尝试将.pdf下载到我的本地,以便我可以使用Apache PDFBox从中读取文本并将其验证为我的测试套件的一部分。我已经找到了一些代码,可以通过点击URL从Firefox下载pdf。这对我不起作用,因为我正在使用的pdf是一个机密文档,因此它不会被URL公开,而是作为弹出窗口加载到PDF Viewer中。在浏览器中加载PDF Viewer后,有谁知道如何点击Firefox PDF Viewer中的下载按钮?
我试过通过元素的ID查找它="下载":
(new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("download")));
driver.findElement(By.id("download")).click();
不幸的是,这不起作用,因为它说它找不到元素。有人知道解决方法吗?
更新:我描述的弹出窗口是iframe元素。这导致无法找到"下载"元件。使用@ 4M01的switchTo()回答固定。
答案 0 :(得分:1)
如你所说,
在PDF Viewer中作为弹出窗口加载
您需要使用驱动程序对象的switchTo()
方法处理不同窗口之间的切换。
下面的代码工作正常,没有问题,我可以点击下载图标。
public class FirefoxPDFTest {
WebDriver driver;
@BeforeClass
void Setup(){
System.setProperty("webdriver.gecko.driver", "C:\\Automation\\Selenium\\drivers\\geckodriver.exe");
driver = new FirefoxDriver();
driver.manage().window().maximize();
}
@Test
void downloadPDF(){
driver.get("http://www.pdf995.com/samples/pdf.pdf");
waitTillPageLoad();
driver.findElement(By.id("download")).click();
}
private void waitTillPageLoad(){
new WebDriverWait(driver, 30).until(driver -> ((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete"));
}
@AfterClass
void tearDown(){
driver.close();
driver.quit();
}
}
答案 1 :(得分:1)
只需使用以下代码点击下载按钮:
driver.findElement(By.xpath("//button[@id='download']")).click();
Thread.sleep(8000);
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.keyRelease(KeyEvent.VK_ENTER);
答案 2 :(得分:1)
我们可以使用Firefox浏览器设置和使用WebDriver的Firefox Profile设置在Firefox浏览器中处理下载弹出窗口。
步骤1:在Firefox浏览器中更新设置。
打开Firefox浏览器并导航到工具 - >选项 导航到应用程序。 将Action类型设置为PDF的“保存文件”。
第2步:使用FirefoxProfile初始化FireFoxDriver
File downloadsDir = new File("");
// Set Preferences for FirefoxProfile.
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("browser.download.folderList", 2);
profile.setPreference("browser.download.dir", downloadsDir.getAbsolutePath());
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.helperApps.neverAsk.saveToDisk",
"application/msword, application/csv, application/ris, text/csv, image/png, application/pdf, text/html, text/plain, application/zip, application/x-zip, application/x-zip-compressed, application/download, application/octet-stream");
profile.setPreference("browser.download.manager.showWhenStarting", false);
profile.setPreference("browser.download.manager.focusWhenStarting", false);
profile.setPreference("browser.download.useDownloadDir", true);
profile.setPreference("browser.helperApps.alwaysAsk.force", false);
profile.setPreference("browser.download.manager.alertOnEXEOpen", false);
profile.setPreference("browser.download.manager.closeWhenDone", true);
profile.setPreference("browser.download.manager.showAlertOnComplete", false);
profile.setPreference("browser.download.manager.useWindow", false);
profile.setPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.setPreference("pdfjs.disabled", true);
// Initialize the FireFoxDriver instance.
FirefoxDriver webDriver = new FirefoxDriver(profile);
第3步:执行脚本
执行点击下载PDF图标的脚本。
结果:将下载PDF文件,并且不会显示“下载”弹出窗口。
答案 3 :(得分:0)
您可以使用以下(C#)代码处理下载图标(使用Firefox):
IWebElement element = Driver.FindElement(By.Id("download"));
IJavaScriptExecutor executor = (IJavaScriptExecutor)Driver;
executor.ExecuteScript("arguments[0].click();", element);