强制 selenium 使用便携式 Firefox 应用程序

Posted

技术标签:

【中文标题】强制 selenium 使用便携式 Firefox 应用程序【英文标题】:Force selenium to use the portable firefox application 【发布时间】:2014-04-12 22:54:10 【问题描述】:

我已经安装了 firefox 14 并在机器上安装了 firefox portable 25.0.1 版,我在该机器上运行网站测试。

由于我正在测试的站点的限制,我无法在 Firefox 14 安装上运行我的测试。我也无法升级 Firefox 14 安装。

所以我正在寻找一种解决方案,我可以使用这个便携式 firefox 版本而不是安装的 firefox 14 版本。

我应该如何强制 selenium 使用这个便携版本而不是安装版本?如果有人可以指导我阅读一些描述性文章/博客,那就太好了。

我的代码如下:-

* 变量 *

$SELENIUM_HUB     remote_url=http://127.0.0.1:4444/wd/hub
$BROWSER      firefox D:\\Firefox Portable\\FirefoxPortable\\firefox.exe
$CLIENT_URL       https://abcd.aline.local

Open Browser    $CLIENT_URL    $BROWSER   $SELENIUM_HUB

将路径指定为 D:/Firefox Portable/FirefoxPortable/firefox.exe 不起作用,因为 '/' get 已删除。有什么想法吗?

PS:python是使用的语言

【问题讨论】:

你使用的是 Selenium 还是 Selenium2? 【参考方案1】:

在实例化 Firefox 网络驱动程序时,您可以使用作为 firefox_binary 参数传递的 FirefoxBinary 类指定所需的 Firefox 二进制文件的路径。

http://selenium.googlecode.com/svn/trunk/docs/api/py/webdriver_firefox/selenium.webdriver.firefox.firefox_binary.html

http://selenium.googlecode.com/svn/trunk/docs/api/py/webdriver_firefox/selenium.webdriver.firefox.webdriver.html#module-selenium.webdriver.firefox.webdriver

确保二进制文件的路径正确,例如:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

firefox_binary = FirefoxBinary("D:\\Firefox Portable\\FirefoxPortable\\firefox.exe")
driver = webdriver.Firefox(firefox_binary=firefox_binary)

使用机器人框架之类的:

$firefox_binary=  Evaluate    sys.modules['selenium.webdriver.firefox.firefox_binary'].FirefoxBinary("D:\\Firefox Portable\\FirefoxPortable\\firefox.exe")    sys, selenium.webdriver.firefox_binary
Create Webdriver    Firefox    firefox_binary=$firefox_binary

可能会起作用。

【讨论】:

谢谢。我正在使用机器人框架并将浏览器名称用作:firefox D:\\Firefox Portable\\FirefoxPortable\\firefox.exe 但问题是它给出了一个“值错误”,上面写着“firefox D:\Firefox Portable” \FirefoxPortable\firefox.exe 不是受支持的浏览器。' 我已经更新了一个例子。我认为您的路径可能不正确 谢谢。到目前为止,我已经说明了我的代码(如下)。你能就此提出建议吗? 又更新了,试试看。【参考方案2】:

Selenium2Library 不允许您在 Open Browser 关键字中指定浏览器路径,但它确实具有有用的 remote_url 参数。在 Selenium2Library 获得适当的 PhantomJS 支持之前,使用 PhantomJS 的方式是通过 remote_url,就像这样 http://spage.fi/phantomjs

所以理论上我们应该能够首先使用便携式 Firefox,方法是启动我们的 Firefox,然后使用remote_url 连接到它。像这样。

Start Process    c:\\path\\to\\portable\\firefox.exe
Open Browser    http://google.com    firefox    main browser    http://localhost:$firefox webdriver port

问题是我不知道 Firefox 默认使用什么 webdriver 端口或如何指定它。可能还需要为 Firefox 安装 webdriver.xpi 插件。插件可以从这里 C:\Python27\Lib\site-packages\selenium\webdriver\firefox 或者你的 python 安装位置找到。

Selenium2Library 中有一个 Create Webdriver 关键字,它允许我们指定 firefox_binary(以及其他参数)。所以理论上

Create Webdriver    Firefox    firefox_binary=c:\\path\\to\\portable\\firefox.exe

应该可以,但我从中得到的只是“AttributeError: 'str' object has no attribute 'launch_browser'”。

很抱歉,我想不出办法,但通过深入了解 Firefox webdriver 端口或 Create Webdriver 的实际工作原理,您可能会走得更远。

【讨论】:

firefix_binary 用于 FirefoxBinary 的实例,而不是路径。 FirefoxBinary 的 init 采用路径。换句话说,你必须构造一个 FirefoxBinary 并将其传入。这就是你得到一个 AttributeError 的原因。

以上是关于强制 selenium 使用便携式 Firefox 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

转 Python selenium 强制等待显示等待隐式等待

java工作复习——4大时间等待——强制等待(Thread.sleep(5000);)

Python selenium 三种等待方式详解

Python selenium 三种等待方式解读

Firefox自用便携定制版

python爬虫selenium的三种等待