【发布时间】:2017-02-26 01:33:21
【问题描述】:
自从我升级到最新的 Selenium 版本后,我的 Firefox 驱动程序无法正常工作。无法通过搜索 Google/Stack 找到答案我希望这里有人有答案。
我已经构建了一个页面对象模型,用于登录网页、点击管理站点并填写用户名/密码 + 提交。此代码是为 Selenium 2.53.6 编写的,但仍适用于 IE 和 Chrome。 对我来说失败的部分是这行代码:
driver.find_element_by_xpath(locators["login.open"]).click()
定位器是:
locators["login.open"] = "//*[@href='//www.phptravels.net/admin']"
既然它在 IE 和 Chrome 中运行,那么我很困惑 Firefox 不能再.click() 了?
我的控制台中没有收到错误消息,只是没有单击管理站点按钮。这可能与 Selenium 3/geckodriver 的给定 Firefox 版本有关吗?
使用pip所有驱动程序都是最新的
我正在使用这个网站来练习我的 Selenium:http://phptravels.com/demo/
编辑 (1):我已尝试使用 Firefox 版本 48 和 49 - 仍然无法正常工作
编辑 (2):geckodriver 配置了 Firefox 二进制文件,但驱动程序仍未执行 .click()
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/binary')
driver = webdriver.Firefox(firefox_binary=binary)
编辑 (3):我使用 is_displayed() 检查 xpath 定位器是否存在该元素,它返回 True。所以我知道它可以找到元素。
编辑(4):1)按照建议尝试使用 Nightly 构建,但不起作用。 2) 尝试使用 find_element_by_link_text,也不起作用。 3) 尝试了各种版本的 geckodriver(10.0、11.0、11.1 用于所有版本的 32 位和 64 位)
编辑 (5):每次测试用例失败时,“Firefox 插件容器已停止工作”都会持续生成。
编辑 (6):问题的可能解决方案:我在另一个网站上进行了另一次测试,Firefox 成功执行了 .click()。在 .click() 失败的第一个目标网页上,有一个巨大的 javascript 会在您打开页面时运行。这可能会扰乱 geckodriver 在 javascript-heavy 页面上执行 .click() 的能力。
编辑 (7):将 .send_keys(Keys.RETURN) 与 Keys 库一起使用是可行的,但如果您使用的是 POM,则可能需要进行额外的重新配置。明确地做一些 time.sleep 会让你周围,但现在使用 Selenium 3 + Firefox/geckodriver 进行网络浏览器自动化仍然很脆弱。如果您需要测试 Firefox,请降级到上一个稳定版本 (2.53.6)(注意:最新版本的 Firefox 将无法使用)。
【问题讨论】:
-
我有同样的问题(但使用 Java)。自从升级到 v3 以来,我在使用 geckodriver 时遇到了几个类似的问题。似乎有些链接可以通过这种方式点击,而另一些则拒绝点击。我使用 xpath 取得了一些成功,例如 //a[text()='linktext'] 而不是 By.linkText,但它并不一致。没有 API 方法可以知道点击是否成功。
-
升级到 selenium 3 后,我也看到了这个问题(在 C# 中)。
-
RE:编辑#6。如果您在单击之前执行 Thread.Sleep(10000) 会发生什么,让页面稳定下来或其他什么。作为故障排除措施...
-
我试过了,但没有用。不过谢谢你的建议。有时这实际上会有所帮助,但在这种情况下则不然。我也对所有元素进行了隐式等待,并且我尽量避免进行显式等待,因为这会减慢我的测试速度
-
我在使用 Python 2.7 和 Selenium 3.0.2 和 gecko 驱动程序 0.11 和 Firefox Developer Edition 52.0a2 时也遇到了同样的错误。我四处走走:gist.github.com/mpasternak/f2840edea51c211d609daa7f17be614f。我调用 jQuery 来单击该项目,这样它就不必滚动到视图中,然后我忽略了某种木偶错误,它试图从 javascript 获取返回值。实际上,当我的 Selenium 库 (Splinter) 尝试打开“about:blank” URL 时,以前的 Firefox 会挂起,所以...
标签: python-3.x firefox selenium-webdriver geckodriver selenium3