2017-07-08 120 views
1

我ubuntu上的virtualbox, 我设置一个网格为Python错误硒网格

Java的罐子硒 - 服务器 - 独立-3.4.0.jar运行蟒3硒网格-port 4444 -role毂

一切似乎确定我得到终端

INFO - 硒电网枢纽和运行

我添加一个节点

Java的罐子selenium-server-standalone-3.4.0.jar -role webdriver -browser“browserName = firefox,version = 54,maxinstance = 2,platform = LINUX”-hub http://localhost:4444/grid/register -port 5555

一切似乎都没问题我在码头上

信息 - 节点注册到集线器,并准备使用

INFO - SessionCleaner与insideBrowserTimeout 0和clientGoneTimeout 1800000查询初始化每18万

如果我运行该代码与节点地址http://10.0.2.15:5555/wd/hub 一切正常

PLATFORM = 'LINUX' 
BROWSER = 'firefox' 

    def setUp(self): 
     desired_caps = {} 
     desired_caps['platform'] = self.PLATFORM 
     desired_caps['browserName'] = self.BROWSER 
     self.driver = \ 
      webdriver.Remote('http://10.0.2.15:5555/wd/hub', desired_caps) 
     self.driver.get("https://www.facebook.com/login/") 
     self.driver.implicitly_wait(30) self.driver.maximize_window() 

如果我上面运行与电网地址http://10.0.2.15:4444/wd/hub代码像它应该它必须是我总是得到一个错误:

Error 
Traceback (most recent call last): 
    File "/home/thorbuntu/PycharmProjects/seletests/grid_test.py", line 21, in setUp 
    webdriver.Remote('http://10.0.2.15:4444/wd/hub', desired_caps) 
    File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 98, in __init__ 
    self.start_session(desired_capabilities, browser_profile) 
    File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 188, in start_session 
    response = self.execute(Command.NEW_SESSION, parameters) 
    File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute 
    self.error_handler.check_response(response) 
    File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.WebDriverException: Message: None 
Stacktrace: 
    at java.util.HashMap.putMapEntries (HashMap.java:500) 
    at java.util.HashMap.putAll (HashMap.java:784) 
    at org.openqa.selenium.remote.DesiredCapabilities.<init> (DesiredCapabilities.java:55) 
    at org.openqa.grid.web.servlet.handler.RequestHandler.process (RequestHandler.java:104) 
    at org.openqa.grid.web.servlet.DriverServlet.process (DriverServlet.java:83) 
    at org.openqa.grid.web.servlet.DriverServlet.doPost (DriverServlet.java:67) 
    at javax.servlet.http.HttpServlet.service (HttpServlet.java:707) 
    at javax.servlet.http.HttpServlet.service (HttpServlet.java:790) 
    at org.seleniumhq.jetty9.servlet.ServletHolder.handle (ServletHolder.java:841) 
    at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle (ServletHandler.java:543) 
    at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188) 
    at org.seleniumhq.jetty9.server.session.SessionHandler.doHandle (SessionHandler.java:1584) 
    at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle (ScopedHandler.java:188) 
    at org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle (ContextHandler.java:1228) 
    at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:168) 
    at org.seleniumhq.jetty9.servlet.ServletHandler.doScope (ServletHandler.java:481) 
    at org.seleniumhq.jetty9.server.session.SessionHandler.doScope (SessionHandler.java:1553) 
    at org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope (ScopedHandler.java:166) 
    at org.seleniumhq.jetty9.server.handler.ContextHandler.doScope (ContextHandler.java:1130) 
    at org.seleniumhq.jetty9.server.handler.ScopedHandler.handle (ScopedHandler.java:141) 
    at org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle (HandlerWrapper.java:132) 
    at org.seleniumhq.jetty9.server.Server.handle (Server.java:564) 
    at org.seleniumhq.jetty9.server.HttpChannel.handle (HttpChannel.java:320) 
    at org.seleniumhq.jetty9.server.HttpConnection.onFillable (HttpConnection.java:251) 
    at org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded (AbstractConnection.java:279) 
    at org.seleniumhq.jetty9.io.FillInterest.fillable (FillInterest.java:112) 
    at org.seleniumhq.jetty9.io.ChannelEndPoint$2.run (ChannelEndPoint.java:124) 
    at org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob (QueuedThreadPool.java:672) 
    at org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run (QueuedThreadPool.java:590) 
    at java.lang.Thread.run (Thread.java:748) 

在哪里可以是问题我是rinning Ubuntu的VirtualBox上和硒蟒蛇

非常感谢

+0

从给出的信息中唯一有意义的东西(尽管追溯通常会告诉你)是有一些东西已经在端口4444上的网格系统上运行了。你可以在命令行执行一个'netstat -a'来看看是否有任何东西在该端口上运行。 –

回答

1

你实际上可能跌进在电网侧的错误(这已经确定了,但一待释放)

当你的Python客户端代码就会通过以下线路

desired_caps = {} 
desired_caps['platform'] = self.PLATFORM 
desired_caps['browserName'] = self.BROWSER 

self.driver = webdriver.Remote('http://10.0.2.15:4444/wd/hub', desired_caps) 

这被翻译成以下表格

{ 
    "capabilities": { 
     "alwaysMatch": { 
      "browserName": "chrome" 
     }, 
     "firstMatch": [ 

     ] 
    }, 
    "desiredCapabilities": { 
     "browserName": "chrome" 
    } 
} 

在电网侧的JSON有效载荷一个新的远程的webdriver(硒网格v.3.4.0),集线器尝试使用以下逻辑将此JSON解析为期望的能力:org.openqa.grid.web.servlet.handler.WebDriverRequest#extractDesiredCapability

public Map<String, Object> extractDesiredCapability() { 
    String json = getBody(); 
    try { 
     JsonObject map = new JsonParser().parse(json).getAsJsonObject(); 
     // Current W3C has required/desired capabilities wrapped in a 'capabilites' object. 
     // This will need to be updated if/when https://github.com/w3c/webdriver/pull/327 gets merged 
     if (map.has("capabilities")) { 
     return new JsonToBeanConverter().convert(Map.class, map.getAsJsonObject("capabilities").getAsJsonObject("desiredCapabilities")); 
     } 
     JsonObject dc = map.get("desiredCapabilities").getAsJsonObject(); 
     return new JsonToBeanConverter().convert(Map.class, dc); 

    } catch (Exception e) { 
     throw new GridException("Cannot extract a capabilities from the request: " + json, e); 
    } 
} 

正如你所看到的,这个逻辑结束了,因为所需的功能,返回NULL值:

  • 在JSON有效载荷,元素capabilities被发现,但 内JSON子元素capabilities,没有子元素称为desiredCapabilities
  • 这会导致通过extractDesiredCapability()返回NULL映射并最终触发NullPointerException

我知道,这已得到修复的硒网格代码库的this一部分提交其实例化一个HashMap之前添加空校验后卫和this承诺确保电网基本检查,如果:

  • 的JSON有效载荷有一个名为capabilities
  • 中的关键capabilities键有一个名为desiredCapabilities子项将尝试在提取能力,地图和之前如果不只是寻找关键desiredCapabilities

另一方面,如果您将测试代码直接指向节点,则它可以正常工作,因为测试路由到节点时不会涉及到上述解析。

因此,现在我建议你回滚使用Selenium 2.53.1的Grid,直到下一个版本(其中包含上面提到的提交)被发布。

希望有所帮助。

+0

非常感谢您的回复我正在为此发疯 –

+0

如果有帮助,您可以帮我接受我的答案吗? –

+0

除降级外,是否还有其他解决方法?我不敢相信他们会像这样彻底打破网格...... – vladosaurus