Ani*_*rma 14 ruby selenium webdriver
我正在使用带有selenium web-driver的ruby脚本,用于自动化网页登录.问题是在脚本完成后它也关闭了浏览器.我想在脚本完成后保持浏览器打开.在测试用浏览器窗口执行其他操作后,有什么方法可以让浏览器保持打开状态?
我这样做.
if browser == "Firefox"
driver = Selenium::WebDriver.for :firefox
end
if stack == "example.com"
driver.get "http://www.example.com/tests/
end
element = driver.find_element :name => "email"
element.clear
element.send_keys username
element = driver.find_element :name => "password"
element.clear
element.send_keys password
element = driver.find_element :name => "commit"
element.submit
Run Code Online (Sandbox Code Playgroud)
================================================== =
Tyl*_*ick 13
我从来没有尝试过selenium-webdriver
像这样的独立脚本,但我selenium-webdriver
在capybara
/ 的上下文中遇到了同样的问题cucumber
.
查看源代码capybara
,我发现这个钩子在脚本完成后显式关闭了浏览器.如果你不使用selenium-webdriver
带capybara
,那么这可能没有帮助,但对我来说是有帮助的...
gems/capybara-1.1.1/lib/capybara/selenium/driver.rb
注册一个at_exit
钩子,然后调用quit
浏览器对象:
require 'selenium-webdriver'
class Capybara::Selenium::Driver < Capybara::Driver::Base
...
def browser
unless @browser
@browser = Selenium::WebDriver.for(options[:browser], options.reject { |key,val| SPECIAL_OPTIONS.include?(key) })
main = Process.pid
at_exit do
# Store the exit status of the test run since it goes away after calling the at_exit proc...
@exit_status = $!.status if $!.is_a?(SystemExit)
quit if Process.pid == main
exit @exit_status if @exit_status # Force exit with stored status
end
end
@browser
end
Run Code Online (Sandbox Code Playgroud)
您应该能够对quit
方法进行猴子修补,以便它不会执行任何操作,如下所示:
Selenium::WebDriver::Driver.class_eval do
def quit
#STDOUT.puts "#{self.class}#quit: no-op"
end
end
Run Code Online (Sandbox Code Playgroud)
注意:如果您正在使用Selenium::WebDriver.for :chrome
和chromedriver
- 您不是,但其他人可能 - 我注意到它也会杀死该chromedriver
过程,并且一旦"服务"过程被终止,Chrome 浏览器进程就会被连接它也退出了.
所以我不得不阻止服务进程停止,如下所示:
Selenium::WebDriver::Chrome::Service.class_eval do
def stop
#STDOUT.puts "#{self.class}#stop: no-op"
end
end
Run Code Online (Sandbox Code Playgroud)
我遇到了另一个问题,这可能不会影响你,除非你使用黄瓜这个驱动程序......即使我把它打开浏览器,它仍将打开"关于:空白页.看起来这是由这个钩子触发的:
宝石/水豚-1.1.1/lib目录/豚/ cucumber.rb:
After do
Capybara.reset_sessions!
end
Run Code Online (Sandbox Code Playgroud)
哪个叫gems/capybara-1.1.1/lib/capybara/session.rb:70:在'reset!'中
哪个叫gems/capybara-1.1.1/lib/capybara/selenium/driver.rb:80:在'reset!'"中:
def reset!
...
@browser.navigate.to('about:blank')
...
end
Run Code Online (Sandbox Code Playgroud)
我用另一个猴子补丁解决了这个问题:
Capybara::Selenium::Driver.class_eval do
def reset!
end
end
Run Code Online (Sandbox Code Playgroud)
pmo*_*sio 11
这是与Capybara合作的代码
Capybara::Selenium::Driver.class_eval do
def quit
puts "Press RETURN to quit the browser"
$stdin.gets
@browser.quit
rescue Errno::ECONNREFUSED
# Browser must have already gone
end
end
Run Code Online (Sandbox Code Playgroud)
这是我在gems/capybara-1.1.2/lib/capybara/selenium/driver.rb中发现的猴子修补
我刚刚添加了puts和获取行.Selenium :: WebDriver :: Driver给我一个未发现的错误,可能是因为我从水豚中获得了硒.
这有助于查看生成错误的代码是什么,但有一个缺点:浏览器停在最后一页并显示空白屏幕.我必须单击后退按钮才能转到带有错误的页面,该错误可能并不总是有效.有人知道为什么浏览器加载那个空页并节省我挖掘水豚代码的时间吗?谢谢!
小智 4
如果您在启用调试的情况下运行测试并在末尾添加调试器行,则浏览器应该保持打开状态。查看ruby-debug gem。也可能值得查看有关Pry 的Railscast 。
归档时间: |
|
查看次数: |
14282 次 |
最近记录: |