提问人:tkhobbes 提问时间:8/30/2023 更新时间:8/31/2023 访问量:101
Ruby/Rails 和 Selenium 远程配置
Ruby/Rails and Selenium remote configuration
问:
因此,我通过 docker 将 Selenium/standalone-chrome 部署到我网络中的一台机器上,并将端口 4444 映射到 4444。
我可以通过浏览器访问它 http://192.168.0.40:4444。
当我尝试使用以下代码在我的 Ruby/Rails 应用程序中设置它时,我收到以下错误:
Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>
from /Users/thomas/.rbenv/versions/3.2.1/lib/ruby/3.2.0/net/protocol.rb:229:in `rbuf_fill'
当我检查硒网格网络界面时,我确实看到一个正在创建的“会话”......
我不知道我需要做些什么才能让它工作?我发现 Selenium 文档有点令人困惑......
尝试让 Selenium 工作的代码:
options = Selenium::WebDriver::Chrome::Options.new
# I found all of these on various websites - adding them all does not change the problem.
# options.add_argument('--headless')
# options.add_argument('--no-sandbox')
# options.add_argument('--disable-dev-shm-usage')
# options.add_argument('--remote-debugging-port=9222')
driver = Selenium::WebDriver.for :remote, url: 'http://192.168.0.40:4444', options:
我很感激任何提示和技巧。
答:
1赞
Insula
8/31/2023
#1
该错误表明,当您的应用程序尝试从网络套接字读取时,可能会出现超时,当您连接到 selenium docker 容器时,您通常需要指定所需的功能,如下所示:
caps = Selenium::WebDriver::Remote::Capabilities.chrome
driver = Selenium::WebDriver.for(:remote, url: 'http://192.168.0.40:4444/wd/hub', desired_capabilities: caps, options: options)
这会告诉网格要在哪个浏览器和版本上执行测试,请注意,端点/wd/hub
如果上述方法不起作用,您可能需要增加超时时间,以便应用程序有更多时间进行连接:
client = Selenium::WebDriver::Remote::Http::Default.new
client.read_timeout = 120 # seconds
driver = Selenium::WebDriver.for(:remote, url: 'http://192.168.0.40:4444/wd/hub', http_client: client, desired_capabilities: caps, options: options)
如果尚未检查 docker 日志,还应检查:
docker logs <container_id_or_name>
网络/防火墙总是值得检查的:
curl http://192.168.0.40:4444/wd/hub/status
这应该返回一个带有 selenium 服务器状态的 JSON 响应。希望这有帮助!
评论
1赞
tkhobbes
8/31/2023
谢谢。URL 的 /wd/hub 部分是问题所在。 似乎已被弃用(无论如何也不需要)。Selenium::WebDriver::Remote::Capabilities.chrome
评论