2017-07-08 74 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