Selenium 3 Firefox .click()无效

MSJ*_*MSJ 7 firefox python-3.x selenium-webdriver geckodriver selenium3

由于我升级到最新的Selenium版本,我的Firefox驱动程序无法正常工作.未能通过搜索Google/Stack找到答案我希望有人在这里有答案.

我已经构建了一个页面对象模型,用于登录网页,单击管理站点并填写用户名/密码+提交.此代码是为Selenium 2.53.6编写的,但仍适用于IE和Chrome.失败的部分是这行代码:

driver.find_element_by_xpath(locators["login.open"]).click()
Run Code Online (Sandbox Code Playgroud)

定位器是:

locators["login.open"] = "//*[@href='//www.phptravels.net/admin']"
Run Code Online (Sandbox Code Playgroud)

既然它在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)
Run Code Online (Sandbox Code Playgroud)

编辑(3):我使用is_displayed()检查xpath定位器是否存在该元素,然后返回True.所以我知道它可以找到元素.

编辑(4):1)尝试按照建议的夜间构建,不工作.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页面上执行.click()的能力.

编辑(7):使用带键库的.send_keys(Keys.RETURN),但如果您正在使用POM,则可能需要进行其他重新配置.明确地做一些时间.睡眠会让你解决,但目前使用Selenium 3 + Firefox/geckodriver进行网页浏览器自动化仍然很脆弱.如果你需要测试Firefox,请降级到最后稳定版本(2.53.6)(注意:最新版本的Firefox无法运行).

Dil*_*anm 0

我现在遇到了同样的问题,我尝试使用夜间构建,它开始工作,尽管我在尝试在准备好之前单击内容时遇到问题,但这比 Selenium 本身更重要。

当前的夜间构建版本是 52.0a1,您可以在这里找到它。

默认情况下,FirefoxDriver 仍将使用常规安装的 Firefox,因此您需要使用配置文件/选项/二进制文件创建驱动程序,我是这样做的(在 C# 中,但在 Python 中应该非常相似);

var binary = new FirefoxBinary(@"C:\Program Files (x86)\Nightly\firefox.exe"); Driver = new FirefoxDriver(binary, null);

我认为它可能是FirefoxDriver(binary: binary)用 Python 编写的,但不完全确定。请注意,从 Selenium 3 开始,使用FirefoxBinaryFirefoxOptions 已被废弃,但它可以让您测试这是否是您目前的问题。