我通过命令启动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 \ nERROR \ n无法检索所请求的URL \ 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 \ n系统返回:(111)连接被拒绝\ n \ n远程主机或网络可能已关闭。请重试该请求。\ n \ n您的缓存管理员是网站管理员。\ n \ n \ n \ n \ n \ n \ n由格林尼治标准时间(2013年6月10日)04:36:42本地主机(squid / 3.1.6)\ 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()方法:

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

09-15 12:21