Selenium Grid WebDriver 在等待网格扩展时返回 504 网关超时

Selenium Grid WebDriver returning 504 Gateway Time-out while waiting for grid to scale

目前我在 AWS Fargate 上有一个 Selenium Grid 运行ning,它会根据集线器上所需的会话自动缩放。我有一项服务 运行 是中心任务和节点任务的服务。我目前使用每个节点一个会话的方法,因为需要必要的资源,而且整体执行速度不是这个测试套件的主要目标。我也总是至少保留一个节点 运行ning.

实际的自动缩放将起作用;集线器发现它需要更多节点并将节点服务扩展到所需的规模。集线器将保持会话直到节点可用,并在节点可用时将其正确放置在那里。

如果我一次只 运行ning 一个,测试就可以完美地工作,但是我 运行ning 遇到的问题是当我尝试 运行并行分组并需要扩展网格,调用 WebDriver 30 秒后出现 504 网关超时。我试图更改所有可能的设置以增加此超时但无济于事。

我的集线器配置看起来像

browserTimeout : 0
debug : false
jettyMaxThreads : -1
host : XXXXXXXXX
port : 4444
role : hub
timeout : 180000
cleanUpCycle : 5000
maxSession : 5
hubConfig : /opt/selenium/config.json
capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher
newSessionWaitTimeout : -1
throwOnCapabilityNotPresent : true
registry : org.openqa.grid.internal.DefaultGridRegistry

节点配置看起来像

browserTimeout: 0
debug: false
jettyMaxThreads: -1
host: XXXXXXXXX
port: 5555
role: node
timeout: 1800
cleanUpCycle: 5000
maxSession: 1
capabilities: Capabilities {applicationName: , browserName: chrome, maxInstances: 1, platform: LINUX, platformName: LINUX, seleniumProtocol: WebDriver, server:CONFIG_UUID: ..., version: 66.0.3359.170}
downPollingLimit: 2
hub: http://XXXXXXXXX:4444/grid/register
id: http://XXXXXXXXX:5555
nodePolling: 5000
nodeStatusCheckTimeout: 5000
proxy: org.openqa.grid.selenium.proxy.DefaultRemoteProxy
register: true
registerCycle: 5000
remoteHost: http://XXXXXXXXX:5555
unregisterIfStillDownAfter: 10000

出于某些特定的业务原因,我正在通过 Jruby 调用我的 selenium 测试,基本配置看起来像

co = Java::OrgOpenqaSeleniumChrome::ChromeOptions.new
co.add_arguments(["--disable-extensions"].to_java(:string))
co.add_arguments(["no-sandbox"].to_java(:string))
co.add_arguments("--headless")
chrome_prefs = {}
chrome_prefs["profile.default_content_settings.popups"] = 0.to_s
chrome_prefs["safebrowsing.enabled"] = "true"
co.set_experimental_option("prefs", chrome_prefs)
cap = Java::OrgOpenqaSeleniumRemote::DesiredCapabilities.chrome
cap.set_capability("Capability", co)

$grid_url = ENV['GRID_URL']
$driver = Java::OrgOpenqaSeleniumRemote::RemoteWebDriver.new(Java::JavaNet::URL.new($grid_url), cap) 
# Get timeout after the RemoteWebDriver.new call

有谁知道如何在这里更改超时?

这与 Selenium 设置完全无关,因此,如果其他人在一般情况下使用 Fargate 或 ECS 时碰巧 运行 遇到此问题,并且您 运行 将 Hub 放在后面负载均衡器...

如果您的 CloudFormation 恰好基于他们在 Github 上的 AWS Fargate 示例,请务必更改他们的内容 idle_timeout.timeout_seconds 为 Load Balancer 设置为。