Python 3.x python错误的selenium网格

Python 3.x python错误的selenium网格,python-3.x,selenium,selenium-grid,Python 3.x,Selenium,Selenium Grid,我在ubuntu virtualbox上运行selenium grid for python 3, 我设置了一个网格 java-jar-selenium-server-standalone-3.4.0.jar-端口4444-角色中心 我上了终点站,一切似乎都很好 信息-Selenium Grid hub已启动并运行 我添加一个节点 java-jar selenium-server-standalone-3.4.0.jar-role webdriver-browser“browserName=fi

我在ubuntu virtualbox上运行selenium grid for python 3, 我设置了一个网格

java-jar-selenium-server-standalone-3.4.0.jar-端口4444-角色中心

我上了终点站,一切似乎都很好

信息-Selenium Grid hub已启动并运行

我添加一个节点

java-jar selenium-server-standalone-3.4.0.jar-role webdriver-browser“browserName=firefox,version=54,maxinstance=2,platform=LINUX”-集线器-端口5555

我上了终点站,一切似乎都很好

信息-节点已注册到中心并准备就绪

信息-SessionCleaner初始化为每180000轮询一次insideBrowserTimeout 0和clientGoneTimeout 1800000

如果我使用节点地址运行此代码 一切正常

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()
如果我使用假定的网格地址运行上面的代码,我总是会得到一个错误:

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)
错误
回溯(最近一次呼叫最后一次):
文件“/home/thorbuntu/PycharmProjects/seletests/grid_test.py”,第21行,在设置中
webdriver.Remote('http://10.0.2.15:4444/wd/hub,所需的(大写)
文件“/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py”,第98行,在__
self.start\u会话(所需的\u功能、浏览器\u配置文件)
文件“/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py”,第188行,在启动会话中
响应=self.execute(Command.NEW_会话,参数)
文件“/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py”,执行中的第256行
self.error\u handler.check\u响应(响应)
文件“/usr/local/lib/python3.5/dist packages/selenium/webdriver/remote/errorhandler.py”,第194行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.WebDriverException:消息:无
堆栈跟踪:
位于java.util.HashMap.putMapEntries(HashMap.java:500)
位于java.util.HashMap.putAll(HashMap.java:784)
位于org.openqa.selenium.remote.DesiredCapabilities。(DesiredCapabilities.java:55)
位于org.openqa.grid.web.servlet.handler.RequestHandler.process(RequestHandler.java:104)
位于org.openqa.grid.web.servlet.DriverServlet.process(DriverServlet.java:83)
位于org.openqa.grid.web.servlet.DriverServlet.doPost(DriverServlet.java:67)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
位于org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:841)
位于org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:543)
位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
位于org.seleniumhq.jetty9.server.session.SessionHandler.doHandle(SessionHandler.java:1584)
位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
位于org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1228)
位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
位于org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:481)
位于org.seleniumhq.jetty9.server.session.SessionHandler.doScope(SessionHandler.java:1553)
位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
位于org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1130)
位于org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
位于org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
位于org.seleniumhq.jetty9.server.server.handle(server.java:564)
位于org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:320)
位于org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:251)
位于org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.successed(AbstractConnection.java:279)
位于org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:112)
位于org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
位于org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:672)
位于org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:590)
在java.lang.Thread.run(Thread.java:748)
我在virtualbox和selenium python上运行ubuntu的问题出在哪里


非常感谢

您可能实际上在网格端遇到了一个bug(该bug已经修复,但尚未发布)

当python客户机代码通过以下行实例化新的远程WebDriver时

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)
这将转换为以下形式的JSON有效负载

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

        ]
    },
    "desiredCapabilities": {
        "browserName": "chrome"
    }
}
在网格端(Selenium grid v.3.4.0),中心尝试使用
org.openqa.grid.web.servlet.handler.WebDriverRequest#extractDesiredCapability
中的以下逻辑将此JSON解析为所需功能:

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);
    }
}
publicmap-extractedDesiredCapability(){
字符串json=getBody();
试一试{
JsonObject map=newJSONParser().parse(json).getAsJsonObject();
//当前的W3C具有封装在“capabilites”对象中的必需/期望功能。
//如果/当发生以下情况时,需要更新此信息https://github.com/w3c/webdriver/pull/327 合并
if(map.has(“能力”)){
返回新的JsonToBeanConverter().convert(Map.class、Map.getAsJsonObject(“能力”).getAsJsonObject(“desiredCapabilities”);
}
JsonObject dc=map.get(“desiredCapabilities”).getAsJsonObject();
返回新的JsonToBeanConverter().convert(Map.class,dc);
}捕获(例外e){
抛出新的GridException(“无法从请求中提取功能:“+json,e”);
}
}
如您所见,此逻辑最终为所需功能返回空值,因为:

  • 在JSON负载中,找到了元素
    capabilities
    ,但是 在JSON子元素
    功能
    中,没有子元素ca