我通过命令启动Selenium服务器中心
java -jar selenium-server-standalone-2.33.0.jar -role hub
和Selenium服务器节点通过命令
java -jar selenium-server-standalone-2.33.0.jar -role node -hub http://localhost:4444/grid/register -browser browserName=htmlunit
然后我试图执行代码:
from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities server = 'http://localhost:4444/wd/hub' dc = DesiredCapabilities.HTMLUNIT browser = webdriver.Remote(server, dc) browser.get('http://localhost:8000')
之后一切都很好。但是,当我尝试开始进行詹金斯测试时:
from django.test import TestCase, LiveServerTestCase from selenium.webdriver.common import proxy from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.remote.webdriver import WebDriver class SeleniumTest(LiveServerTestCase): @classmethod def setUpClass(cls): p = proxy.Proxy({ 'proxyType': proxy.ProxyType().MANUAL, 'httpProxy': '127.0.0.1:4444', }) capabilities = DesiredCapabilities().HTMLUNIT cls.selenium = WebDriver(desired_capabilities=capabilities, proxy=p) super(SeleniumTest, cls).setUpClass() @classmethod def tearDownClass(cls): cls.selenium.quit() super(SeleniumTest, cls).tearDownClass() def test_javascript_basket(self): self.selenium.get('http://localhost:8000')
我收到以下错误,包含在追溯中:
WebDriverException:消息:u’\ n \ n \ n错误:无法检索到所请求的URL \ n \ n \ n \ n 错误 \ n 所请求的网址无法检索 \ n \ n \ n \ n \ n 尝试检索URL时遇到以下错误:a href =“ http:// localhost:4444 / wd / hub / session” localhost:4444 / wd / hub / session ap \ n \ n \ n 与127.0.0.1的连接失败。 \ n
WebDriverException:消息:u’\ n \ n \ n错误:无法检索到所请求的URL \ n \ n \ n \ n
\ n
\ n \ n
\ n \ n \ n
尝试检索URL时遇到以下错误:a href =“ http:// localhost:4444 / wd / hub / session” localhost:4444 / wd / hub / session ap \ n \ n \ n
与127.0.0.1的连接失败。
\ n \ n系统返回: (111)连接被拒绝 \ n \ n
远程主机或网络可能已关闭。请重试该请求。
您的缓存管理员是网站管理员。
\ n \ n \ n \ n \ n
由localhost(squid / 3.1.6)于2013年6月10日星期一格林尼治标准时间生成
\ n \ n \ n’
这是怎么回事?为什么从Jenkins测试连接到Selenium服务器无法正常工作?
python==2.7.3 Django==1.5 django-jenkins==0.14.0 selenium==2.33.0
更新: 如果我使用的是Firefox WebDriver而不是HTMLUNIT,则Firefox在行后打开
cls.selenium = WebDriver(desired_capabilities=capabilities, proxy=p)
,但稍后引发上述异常。
解决了, 我只是添加到setUpClass()方法:
setUpClass()
import os . . . def setUpClass(cls): os.environ['NO_PROXY'] = '127.0.0.1'
我以这种方式解决了问题(使用了 phantom-js 而不是 HTMLUNIT ,因为它是唯一剩余的稳定版本的代码)。
from django.test import LiveServerTestCase from selenium import webdriver from os import environ class SeleniumTestCase(LiveServerTestCase): __test__ = False @classmethod def setUpClass(cls): environ['NO_PROXY'] = '127.0.0.1' # The key point cls.selenium = webdriver.PhantomJS(service_args=['--proxy-type=none']) super(SeleniumTestCase, cls).setUpClass() @classmethod def tearDownClass(cls): cls.selenium.close() cls.selenium.quit() super(SeleniumTestCase, cls).tearDownClass() class TestFoo(SeleniumTestCase): def setUp(self): # do something before every test method runs pass def test_foo(self): # test pass