在我的selenium网格设置中,我的会话请求(等待空插槽可用)超时,然后点击newSessionWaitTimeout
,因为他们正在点击RemoteWebDriver命令超时。
我有时会尝试运行比我的节点上的可用插槽更多的测试。这应该是正常,因为试图在可用插槽上获得新会话的测试排队等待直到插槽空闲。我可以在我的网格控制台中正确地看到这种情况(下面的示例消息)。
3个请求等待插槽空闲的请求。 功能[{browserName = chrome,javascriptEnabled = true,version =,platform = ANY}]功能[{browserName = chrome,javascriptEnabled = true,version =,platform = ANY}]功能[{browserName = chrome,javascriptEnabled = true,version =,platform = ANY}]
但是,这些请求在webdriver的命令超时期限后超时,有效忽略 newSessionWaitTimeout
设置。我的newSessionWaitTimeout
设置为默认-1
,以允许无限期等待广告位。 webdriver命令超时defaults to 60 seconds。
OneTimeSetUp:OpenQA.Selenium.WebDriverException:对URL http:// {myHubIP}:4444 / wd / hub / session的远程WebDriver服务器的HTTP请求在60秒后超时。 ----> System.Net.WebException:操作已超时 例外没有堆栈跟踪
我可以将驱动程序的超时增加到比我的测试可能需要等待获取插槽的数量更大的数量,但这会影响驱动程序执行的每个命令。基本上删除命令超时似乎是不合理的,以确保我的测试在等待打开的插槽时不会超时,特别是当有特定的设置应该处理超时时等待会议。
所以,我觉得我在某种程度上错过了某些东西......
我测试过以确保我的newSessionWaitTimeout
实际上是通过将值放在我看到的60秒超时(将其降至10秒)。在运行比打开的插槽更多的测试时执行此操作会在10秒后给出预期的错误,就在提示上。
System.InvalidOperationException:转发新会话时出错请求超时等待节点可用。 在OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse) 在OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary`2参数) 在OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) 在OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor,ICapabilities desiredCapabilities) 在OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress,ICapabilities desiredCapabilities)
因此我可以看到newSessionWaitTimeout
如果实际达到限制就可以正常工作。
运行相同的测试,newSessionWaitTimeout
低于0(无限期等待)或高于驱动程序命令超时(默认为60秒)的任何内容都不会遇到上述错误,因为请求首先超时。而是给出了我在上面的概述部分中列出的错误。
现在,如果我增加RemoteWebDriver的超时,我可以看到这是我在等待新会话时遇到的超时。例如,如果我使用初始化我的RemoteWebDriver
new RemoteWebDriver(new Uri($"http://{myHubIP}:4444/wd/hub"), capabilities, TimeSpan.FromMinutes(3));
然后我收到错误:
OneTimeSetUp:OpenQA.Selenium.WebDriverException:对URL http:// {myHubIP}的远程WebDriver服务器的HTTP请求:4444 / wd / hub / session在180秒后超时。 ----> System.Net.WebException:操作已超时 例外没有堆栈跟踪
同样,如果我把这个值提高到足够的水平(如果我要运行很多测试,可能需要非常大)它解决了我的等待会话问题,但是现在所有的驱动程序命令都存在被挂了很长时间的风险。关于如何正确解决这个问题的想法(这似乎不正确)?
我使用的是Selenium WebDriver和服务器独立3.0.1