Selenium::WebDriver::Error 使用 Firefox & Chrome
Selenium::WebDriver::Error with Firefox & Chrome
问题
1。浏览器 = Firefox(非 Geckodriver,Selenium v2.53.4)
(适用于一个 linux 瘦客户端,但不适用于另一个...)
$ bundle exec rake parallel:spec
Selenium::WebDriver::Error::WebDriverError:
unable to bind to locking port 7054 within 120 seconds
2。 Broswer = Firefox(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)
$ bundle exec rake parallel:spec
Net::ReadTimeout:
Net::ReadTimeout
3。浏览器 = Chrome(Chrome驱动程序 v2.27,Selenium-webdriver v3.1.0)
$ bundle exec rake parallel:spec
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
我的设置
安装了以下内容的服务器:
-Linux - Debian x86_64 喘息
-ruby 2.2.5p319(2016-04-26 修订版 54774)
-Firefox v46.0.3
-Chrome 56.0.2924.87(64 位)
-Chrome驱动程序 2.27.440175
-Xvfb(x11-xserver-utils v 7.7~3 through headless gem)
宝石
-Selenium v3.1.0(原为 2.53.4)
-parallel_tests v2.10.0
-水豚 (2.7.1)
-rspec-activemodel-mocks (1.0.3)
-rspec-核心 (3.4.4)
-rspec-预期 (3.4.0)
-rspec-模拟 (3.4.1)
-rspec-rails (3.4.2)
-rspec-支持 (3.4.1)
-无头 (2.2.3) (Xvfb)
多个瘦客户端运行将他们的软件关闭上述服务器设置。
我的电脑是其中之一...
重要提示:有另一台计算机没有遇到上述问题运行在同一台服务器上安装相同的软件和相同的版本!
不是问题的事情
- 不是我的firefox浏览器版本和Selenium不兼容。
为什么不呢?
a) Firefox v46.0.3 和 Selenium v2.53.4 当前安装在我们的服务器上,并且该服务器的另一个客户端使用上述版本的 Firefox 和 Selenium 成功 运行s parallel_tests。
b)
- 没有僵尸进程(仍然运行ning firefox)导致firefox锁定端口7054。
这特别是在每次失败发生之后和开始新的 $ bundle exec rake parallel:spec
运行.
之前
为什么不呢?
请参阅 'Things I Have Tried'
中的第 1 项和第 2 项
事实并非如此,尽管这不是问题的原因
数据库并不总是被正确杀死,请参阅更新 5。
然而,数据库没有被杀死是问题的结果。
它们不是问题的原因,请参阅解决方案部分。
旁注
对于那些希望安装上述版本以使 selenium / firefox 正常工作的用户:
Installing a previous version doesn't fix most problems
我尝试过的东西
删除了所有仍在 运行ning
的进程
$ killall ruby; killall rspec; killall firefox
结果:失败...
发现完成第1步不足以杀死所有僵尸进程
在登录到不同的 tty 后,我发现仍然有一个 rspec、ruby 和 firefox 进程 运行ning!
所以我注销了我的用户,登录到一个新的 tty,使用以下命令杀死了所有僵尸进程:
$ kill -9 process_id
然后我重新运行 $ ps aux
以确保清理所有进程。
结果:失败...
深入了解问题。
运行 $ lsof -i TCP:7054
查看是什么在控制该进程。
结果:这是我的 firefox 测试,没有惊喜,没有真正的洞察力。
确保并行测试数据库运行正确。
删除所有数据库,重新创建数据库,重新加载所有模式,重新播种(开发),重新准备。
结果:失败...我怀疑是这个原因,但这样做确实消除了它。
删除了 firefox 缓存,所有持久设置,一切,为了一个干净的开始。
结果:失败...
尝试消除从项目中获取的任何本地环境变量。
通过从工作计算机复制项目目录来做到这一点。
然后再运行$ bundle exec rake parallel:spec
.
结果:失败...
尝试消除所有本地环境变量(项目和linux)。
通过创建一个新的 linux 用户来做到这一点。
然后切换到新用户。
$ su new_user -l
复制了所需的最少 zsh 项。
然后运行$ bundle exec rake parallel:spec
结果:失败...
Ensured that /etc/hosts contained:.
127.0.0.1 localhost
结果:失败...
运行在单线程(非并行)中进行测试。
$ rspec spec
结果:成功运行s(未命中问题)
查看更新 1
查看更新 2
查看更新 3
查看更新 4
查看更新 5
部分解决方案
查看更新 6
调试硒 & Parallel_tests gems
结果:确定问题不在 Selenium 中
查看更新 7
结果:运行并行测试有效。但是为什么呢?
查看更新 8
结果:
发现 Selenium 3.1.0 改变了自动下载文件的方式。
这导致测试在 运行 并行测试时无限期挂起。
这导致数据库保持打开状态。
我要尝试的事情(更新)
- 运行 在 chrome 浏览器中使用 chrome 驱动程序进行测试,看看修复后它是否通过。
更新 1
我用 chrome 替换了 firefox。
当我 运行 单个测试时,测试成功完成 chrome。
Firefox 也是如此。
然而运行宁$ bundle exec rake parallel:spec
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 2
我将 selenium-webdriver gem 更新到最新的 gem(之前是 v2.53.4 现在是 3.2.2)
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 3
找到用于并行测试的锁定文件 (~.config/google-chrome)。
识别出 3 个持久锁定文件。
其他用户只有1个。
删除了这些并重新运行 测试。
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 4
已将 selenium-webdriver 升级到 v3.1.0(最新稳定版)
已升级 parallel_tests 至 v2.13.0(最新)
已安装 Geckodriver v0.14.0(最新)
然后运行$ bundle exec rake parallel:spec
结果:失败...
Failure/Error: visit "#/login"
Net::ReadTimeout:
Net::ReadTimeout
更新 5
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
当我不得不删除所有 parallel_test 数据库时,我才意识到有些数据库仍然处于打开状态。
@ltsp:~/ap$ bundle exec rake parallel:drop[32]
Couldn't drop ap_test_andre32 : #<ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "ap_test_andre32" is being accessed by other users
DETAIL: There are 3 other sessions using the database.
: DROP DATABASE IF EXISTS "ap_test_andre32">
Couldn't drop ap_test_andre25 : #<ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "ap_test_andre25" is being accessed by other users
DETAIL: There are 3 other sessions using the database.
: DROP DATABASE IF EXISTS "ap_test_andre25">
当 rake parallel:spec 没有完成时(在 期间不确定地挂起),
必须手动终止进程。
这样做会使数据库锁定到当时正在使用它们的 parallel_tests。
所以他们必须被识别和清理。
postgres 743 0.0 0.0 222364 33628 ? Ss 15:30 0:00 postgres: andre ap_test_andre32 [local] idle in transaction
andre 24581 0.0 0.0 7852 2028 pts/36 S+ 15:49 0:00 grep andre32
postgres 26822 0.0 0.0 220032 23400 ? Ss 15:35 0:00 postgres: andre ap_test_andre32 [local] ALTER TABLE waiting
postgres 29684 0.0 0.0 220032 24064 ? Ss 15:40 0:00 postgres: andre ap_test_andre32 [local] ALTER TABLE waiting
更新5解决方案:
搜索数据库进程并杀死所有进程
ps aux | grep test_andre
andre@ltsp:~/ap$ sudo kill -9 743 26822 29684
然后我就可以删除我的数据库了。
bundle exec rake parallel:drop[32]
更新 6
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
在本地克隆 parallel_tests & Selenium 项目。
将我的 gems 替换为本地克隆项目的路径。
从错误堆栈跟踪开始调试。
结果
更新到 selenium 3.1.0 并加载了 geckodriver (marionette)。
我发现我的 firefox 配置文件没有正确设置 Capybara。
这破坏了我的本地单线程测试。
修复了这个问题。
发现FF<48不能使用geckodriver
还发现 capybara, selenium 3+ & FF48+ 组合还没有准备好使用。
一些重要功能不工作。 (右键单击,window 调整大小...)
Refer here for full details
在调查 parallel_tests 之后,能够排除这种可能性。
继续在firefox测试用例中调试
使用锁定端口错误作为我的指南。
排除了 Selenium 作为错误原因。
调试堆栈跟踪后,证明错误状态很可能是继承的。
这只是当时强烈的预感。
后来证明是对的...
这里的总结是 firefox 有被锁定的进程。
而且它们没有被 Selenium 锁定。
更新 7
同时在 firefox (Selenium-webdriver v2.53.4) b运行ch.
返回到创建的新 linux 用户。
根据更新 5,我放弃清理了所有 运行ning 进程。
删除了所有数据库。
$ bundle exec rake parallel:spec
结果:并行测试有效
但是为什么?
数据库不是问题的原因。
还有别的东西。
更新 8
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
确定了测试失败并最终挂起的原因。
这导致了更新 5 和 6 中描述的问题。
这是由于 Selenium 接受 firefox 配置文件设置的方式发生了变化。
我确定失败的集成测试是启动 pdf 下载的测试。
以前,我有这个自动化,所以下载模式不会出现。
相反,它会自动将文件下载到指定的文件夹。
更新到 Selenium 3.1.0 打破了这个。
测试无限期挂起。
数据库保持开放。
更新中发现的问题不是根本原因。
根本原因是 firefox/chrome 浏览器端口未关闭并保持打开状态。
查看htop后,发现Polkitd占用了16.5gb的内存!
这是由 Polkitd 中的内存泄漏引起的。
检查问题后确认 Polkitd 内存泄漏是已知问题。
该问题已得到解决,但仅在 linux debian 的后续发行版中得到解决,而 Wheezy 则没有。
重新启动 Polkitd 并重新运行并行测试后,它们成功了!
这解释了为什么我第一次创建一个新的 linux 用户并使用干净的配置文件时,并行测试问题仍然存在。 - 内存泄漏是不可预测的。
它还解释了为什么另一台计算机没有 运行 进入该问题。
以及为什么我第二次创建新用户时并行测试有效!
呼,费了好大的劲儿!
Polkitd 已卸载,因为我们 运行 的任何打印机或其他软件都不需要它。
总的来说,如果其他人有锁定问题,那么遵循我所做的一些进程检测会很有帮助,因为有些问题对所有人来说都是常见的 OS。
问题
1。浏览器 = Firefox(非 Geckodriver,Selenium v2.53.4)
(适用于一个 linux 瘦客户端,但不适用于另一个...)
$ bundle exec rake parallel:spec
Selenium::WebDriver::Error::WebDriverError:
unable to bind to locking port 7054 within 120 seconds
2。 Broswer = Firefox(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)
$ bundle exec rake parallel:spec
Net::ReadTimeout:
Net::ReadTimeout
3。浏览器 = Chrome(Chrome驱动程序 v2.27,Selenium-webdriver v3.1.0)
$ bundle exec rake parallel:spec
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
我的设置
安装了以下内容的服务器:
-Linux - Debian x86_64 喘息
-ruby 2.2.5p319(2016-04-26 修订版 54774)
-Firefox v46.0.3
-Chrome 56.0.2924.87(64 位)
-Chrome驱动程序 2.27.440175
-Xvfb(x11-xserver-utils v 7.7~3 through headless gem)宝石
-Selenium v3.1.0(原为 2.53.4)
-parallel_tests v2.10.0
-水豚 (2.7.1)
-rspec-activemodel-mocks (1.0.3)
-rspec-核心 (3.4.4)
-rspec-预期 (3.4.0)
-rspec-模拟 (3.4.1)
-rspec-rails (3.4.2)
-rspec-支持 (3.4.1)
-无头 (2.2.3) (Xvfb)多个瘦客户端运行将他们的软件关闭上述服务器设置。
我的电脑是其中之一...
重要提示:有另一台计算机没有遇到上述问题运行在同一台服务器上安装相同的软件和相同的版本!
不是问题的事情
- 不是我的firefox浏览器版本和Selenium不兼容。
为什么不呢?
a) Firefox v46.0.3 和 Selenium v2.53.4 当前安装在我们的服务器上,并且该服务器的另一个客户端使用上述版本的 Firefox 和 Selenium 成功 运行s parallel_tests。
b) - 没有僵尸进程(仍然运行ning firefox)导致firefox锁定端口7054。
这特别是在每次失败发生之后和开始新的$ bundle exec rake parallel:spec
运行.
之前 为什么不呢?
请参阅 'Things I Have Tried'
中的第 1 项和第 2 项 事实并非如此,尽管这不是问题的原因
数据库并不总是被正确杀死,请参阅更新 5。
然而,数据库没有被杀死是问题的结果。
它们不是问题的原因,请参阅解决方案部分。
旁注
对于那些希望安装上述版本以使 selenium / firefox 正常工作的用户:
Installing a previous version doesn't fix most problems
我尝试过的东西
删除了所有仍在 运行ning
的进程$ killall ruby; killall rspec; killall firefox
结果:失败...发现完成第1步不足以杀死所有僵尸进程
在登录到不同的 tty 后,我发现仍然有一个 rspec、ruby 和 firefox 进程 运行ning!
所以我注销了我的用户,登录到一个新的 tty,使用以下命令杀死了所有僵尸进程:
$ kill -9 process_id
然后我重新运行$ ps aux
以确保清理所有进程。
结果:失败...深入了解问题。
运行$ lsof -i TCP:7054
查看是什么在控制该进程。
结果:这是我的 firefox 测试,没有惊喜,没有真正的洞察力。确保并行测试数据库运行正确。
删除所有数据库,重新创建数据库,重新加载所有模式,重新播种(开发),重新准备。
结果:失败...我怀疑是这个原因,但这样做确实消除了它。删除了 firefox 缓存,所有持久设置,一切,为了一个干净的开始。
结果:失败...尝试消除从项目中获取的任何本地环境变量。
通过从工作计算机复制项目目录来做到这一点。
然后再运行$ bundle exec rake parallel:spec
.
结果:失败...尝试消除所有本地环境变量(项目和linux)。
通过创建一个新的 linux 用户来做到这一点。
然后切换到新用户。
$ su new_user -l
复制了所需的最少 zsh 项。
然后运行$ bundle exec rake parallel:spec
结果:失败...Ensured that /etc/hosts contained:.
127.0.0.1 localhost
结果:失败...运行在单线程(非并行)中进行测试。
$ rspec spec
结果:成功运行s(未命中问题)查看更新 1
查看更新 2
查看更新 3
查看更新 4
查看更新 5
部分解决方案查看更新 6
调试硒 & Parallel_tests gems
结果:确定问题不在 Selenium 中查看更新 7
结果:运行并行测试有效。但是为什么呢?查看更新 8 结果:
发现 Selenium 3.1.0 改变了自动下载文件的方式。
这导致测试在 运行 并行测试时无限期挂起。
这导致数据库保持打开状态。
我要尝试的事情(更新)
- 运行 在 chrome 浏览器中使用 chrome 驱动程序进行测试,看看修复后它是否通过。
更新 1
我用 chrome 替换了 firefox。
当我 运行 单个测试时,测试成功完成 chrome。
Firefox 也是如此。
然而运行宁$ bundle exec rake parallel:spec
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 2
我将 selenium-webdriver gem 更新到最新的 gem(之前是 v2.53.4 现在是 3.2.2)
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 3
找到用于并行测试的锁定文件 (~.config/google-chrome)。
识别出 3 个持久锁定文件。
其他用户只有1个。
删除了这些并重新运行 测试。
结果:失败...
Selenium::WebDriver::Error::NoSuchDriverError:
no such session
(Driver info: chromedriver=2.27.440175 ,platform=Linux 3.16.0-0.bpo.4-amd64 x86_64)
更新 4
已将 selenium-webdriver 升级到 v3.1.0(最新稳定版)
已升级 parallel_tests 至 v2.13.0(最新)
已安装 Geckodriver v0.14.0(最新)
然后运行$ bundle exec rake parallel:spec
结果:失败...
Failure/Error: visit "#/login"
Net::ReadTimeout:
Net::ReadTimeout
更新 5
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
当我不得不删除所有 parallel_test 数据库时,我才意识到有些数据库仍然处于打开状态。
@ltsp:~/ap$ bundle exec rake parallel:drop[32]
Couldn't drop ap_test_andre32 : #<ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "ap_test_andre32" is being accessed by other users
DETAIL: There are 3 other sessions using the database.
: DROP DATABASE IF EXISTS "ap_test_andre32">
Couldn't drop ap_test_andre25 : #<ActiveRecord::StatementInvalid: PG::ObjectInUse: ERROR: database "ap_test_andre25" is being accessed by other users
DETAIL: There are 3 other sessions using the database.
: DROP DATABASE IF EXISTS "ap_test_andre25">
当 rake parallel:spec 没有完成时(在 期间不确定地挂起),
必须手动终止进程。
这样做会使数据库锁定到当时正在使用它们的 parallel_tests。
所以他们必须被识别和清理。
postgres 743 0.0 0.0 222364 33628 ? Ss 15:30 0:00 postgres: andre ap_test_andre32 [local] idle in transaction
andre 24581 0.0 0.0 7852 2028 pts/36 S+ 15:49 0:00 grep andre32
postgres 26822 0.0 0.0 220032 23400 ? Ss 15:35 0:00 postgres: andre ap_test_andre32 [local] ALTER TABLE waiting
postgres 29684 0.0 0.0 220032 24064 ? Ss 15:40 0:00 postgres: andre ap_test_andre32 [local] ALTER TABLE waiting
更新5解决方案:
搜索数据库进程并杀死所有进程
ps aux | grep test_andre
andre@ltsp:~/ap$ sudo kill -9 743 26822 29684
然后我就可以删除我的数据库了。
bundle exec rake parallel:drop[32]
更新 6
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
在本地克隆 parallel_tests & Selenium 项目。
将我的 gems 替换为本地克隆项目的路径。
从错误堆栈跟踪开始调试。
结果
更新到 selenium 3.1.0 并加载了 geckodriver (marionette)。
我发现我的 firefox 配置文件没有正确设置 Capybara。
这破坏了我的本地单线程测试。
修复了这个问题。
发现FF<48不能使用geckodriver
还发现 capybara, selenium 3+ & FF48+ 组合还没有准备好使用。
一些重要功能不工作。 (右键单击,window 调整大小...)
Refer here for full details
在调查 parallel_tests 之后,能够排除这种可能性。
继续在firefox测试用例中调试
使用锁定端口错误作为我的指南。
排除了 Selenium 作为错误原因。
调试堆栈跟踪后,证明错误状态很可能是继承的。
这只是当时强烈的预感。
后来证明是对的...
这里的总结是 firefox 有被锁定的进程。
而且它们没有被 Selenium 锁定。
更新 7
同时在 firefox (Selenium-webdriver v2.53.4) b运行ch.
返回到创建的新 linux 用户。
根据更新 5,我放弃清理了所有 运行ning 进程。
删除了所有数据库。
$ bundle exec rake parallel:spec
结果:并行测试有效
但是为什么?
数据库不是问题的原因。
还有别的东西。
更新 8
同时在 firefox 中(Geckodriver v0.14.0,Selenium-webdriver v3.1.0)b运行ch.
确定了测试失败并最终挂起的原因。
这导致了更新 5 和 6 中描述的问题。
这是由于 Selenium 接受 firefox 配置文件设置的方式发生了变化。
我确定失败的集成测试是启动 pdf 下载的测试。
以前,我有这个自动化,所以下载模式不会出现。
相反,它会自动将文件下载到指定的文件夹。
更新到 Selenium 3.1.0 打破了这个。
测试无限期挂起。
数据库保持开放。
更新中发现的问题不是根本原因。
根本原因是 firefox/chrome 浏览器端口未关闭并保持打开状态。
查看htop后,发现Polkitd占用了16.5gb的内存!
这是由 Polkitd 中的内存泄漏引起的。
检查问题后确认 Polkitd 内存泄漏是已知问题。
该问题已得到解决,但仅在 linux debian 的后续发行版中得到解决,而 Wheezy 则没有。
重新启动 Polkitd 并重新运行并行测试后,它们成功了!
这解释了为什么我第一次创建一个新的 linux 用户并使用干净的配置文件时,并行测试问题仍然存在。 - 内存泄漏是不可预测的。
它还解释了为什么另一台计算机没有 运行 进入该问题。
以及为什么我第二次创建新用户时并行测试有效!
呼,费了好大的劲儿!
Polkitd 已卸载,因为我们 运行 的任何打印机或其他软件都不需要它。
总的来说,如果其他人有锁定问题,那么遵循我所做的一些进程检测会很有帮助,因为有些问题对所有人来说都是常见的 OS。