由于我升级到最新的 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 将无法使用)。