在我的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命令超时默认为60秒.
OneTimeSetUp:OpenQA.Selenium.WebDriverException:远程WebDriver服务器对URL http:// {myHubIP}:4444/wd/hub/session的HTTP请求在60秒后超时.----> System.Net.WebException:操作已超时Exception没有stacktrace
我可以将驱动程序的超时增加到大于我的测试可能需要等待获取插槽的大量,但这将影响驱动程序执行的每个命令.基本上删除命令超时似乎是不合理的,以确保我的测试在等待打开的插槽时不会超时,特别是当有一个特定的设置应该处理等待会话的超时时.
所以,我觉得我在某种程度上错过了一些东西......
我测试过以确保我的newSessionWaitTimeout实际工作是通过在我看到的60秒超时下降值(将其降至10秒).在运行比打开的插槽更多的测试时执行此操作会在10秒后给出预期的错误,就在提示上.
System.InvalidOperationException:转发新会话时出错请求超时等待节点变为可用.在OpenQA上的OpenQA.Selenium.Remium.Selenium.Remium.RemoteWebDriver.Execute(String driverCommandToExecute,Dictionary`2参数)的OpenQA.Selenium.Remote.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)中的OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities). OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress,ICapabilities desiredCapabilities)中的Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor,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:操作已超时Exception没有stacktrace
再说一遍,如果我把这个值提高到足够的水平(如果我要运行很多测试,可能需要非常大),它解决了我的等待会话问题,但现在所有的驱动程序命令都有可能被挂起很长时间.关于如何正确解决这个问题的想法(这似乎不正确)?
我正在使用Selenium WebDriver和服务器独立3.0.1