Selenium 2 Web Driver保存对话框

5
使用Selenium 2和WebDriver时,我的一些脚本需要将报告保存为PDF或CSV格式并弹出“另存为”对话框。我不知道如何与之交互。目前正在尝试在Firefox中实现,但希望在所有浏览器中都能正常工作。
我阅读了几篇2009年的文章,称WebDriver和Selenium无法访问“另存为”对话框,但我想知道是否现在有解决方法。
我只需要点击保存单选按钮,以便它不会尝试打开文件,然后点击保存按钮即可。

我在这里使用Python发布了一个答案。 - JamesThomasMoon
请参考以下链接:https://dev59.com/-YXca4cB1Zd3GeqPDx8z - Nemo
4个回答

3

我所知道的唯一解决方案是只能在Firefox上使用。您可以调整配置文件首选项,将某些MIME类型自动下载到您选择的目录中。请参见我的答案这里


似乎这应该是一个常见的问题,需要在待办事项清单中排名较高,但是我已经看到有关此问题的线程追溯到3年前。我讨厌不得不在我的代码中使用hacky解决方法。 - ducati1212

2
"SaveAs"和"File Open"对话框的问题在于它们依赖于运行测试的操作系统,并且selenium rc无法与其交互。唯一的解决方法是使用一些外部桌面自动化脚本,如AutoIt来处理对话框。这里有一个很好的教程(链接),介绍了如何处理这个问题。

谢谢,
Vamyip


2
OP在谈论WebDriver而不是RC,因此这个功能应该是可行的。 - Draemon
当涉及到桌面自动化时,对于X11(例如Linux,但不仅限于此),您可能会对Jordan Sissel的xdotool感兴趣,因为“该工具可以模拟键盘输入和鼠标活动,移动和调整窗口等”。 - Grzegorz Wierzowiecki

0

如果您只是想要下载文件,那么最好手动下载文件。

使用Selenium而不是HTTP请求进行自动化的原因有很多,但常见的一个原因是在登录和导航时避免处理JavaScript和Cookie。如果这是您感兴趣的内容,下面的Python代码将向您展示如何重用Selenium中的Cookie以获取URL。

import requests
def fetch_url(driver, url):
    cookies = dict([(cookie['name'], cookie['value']) for cookie in    driver.get_cookies()])
    driver.get_cookies()
    return requests.get(url, cookies=cookies)

如果你对全栈测试感兴趣,那就有点不同了...


好的观点,但在浏览器之外下载URL是完全不同的故事。 - Nemo

0

您可以使用sikulixapi来实现此功能,手动打开对话框并使用截图工具(确保您截取的截图适用于预期分辨率,否则sikuli将无法找到,这很糟糕,希望随着时间的推移能够改善)。然后将其存储在文件夹中,这将是您可以使用的代码。

Pattern element = new Pattern(pathToImageString);
Screen screen = new Screen();
try{
    Match match =screen.wait(element);//if you want custom wait time (element,10.5)
    match.click();
}
catch(FindFailed findFailed){
    ..log failure
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接