gpt4 book ai didi

ruby - 即使在 selenium ruby​​ 脚本完成后如何让浏览器保持打开状态

转载 作者:数据小太阳 更新时间:2023-10-29 06:37:16 24 4
gpt4 key购买 nike

我正在使用带有 selenium 网络驱动程序的 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

============================================= ====

最佳答案

我从来没有真正尝试过在这样的独立脚本中使用 selenium-webdriver,但是我在使用 selenium-webdriver 的上下文中遇到了同样的问题 capybara / cucumber

查看 capybara 的源代码,我发现这个钩子(Hook)在脚本完成后明确关闭浏览器。如果您selenium-webdrivercapybara 一起使用,那么这可能没有帮助,但对我很有帮助...

gems/capybara-1.1.1/lib/capybara/selenium/driver.rb 注册一个 at_exit 钩子(Hook),然后调用 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

您应该能够对 quit 方法进行猴子修补,使其什么都不做,如下所示:

  Selenium::WebDriver::Driver.class_eval do
def quit
#STDOUT.puts "#{self.class}#quit: no-op"
end
end

注意:如果您正在使用 Selenium::WebDriver.for :chromechromedriver-- 你不是,但其他人可能是 -- 我注意到它也会终止 chromedriver 进程,并且一旦“服务”进程被终止,连接到它的 Chrome 浏览器 进程也会退出。

所以我还必须防止该服务进程停止,如下所示:

    Selenium::WebDriver::Chrome::Service.class_eval do
def stop
#STDOUT.puts "#{self.class}#stop: no-op"
end
end

我遇到了另一个问题,这可能不会影响你,除非你将这个驱动程序与 cucumber 一起使用......即使在我让浏览器保持打开状态之后,它会在“关于:空白”页面上保持打开状态。看起来这是由这个钩子(Hook)触发的:

gems/capybara-1.1.1/lib/capybara/cucumber.rb:

After do
Capybara.reset_sessions!
end

调用 gems/capybara-1.1.1/lib/capybara/session.rb:70:in `reset!'"

调用 gems/capybara-1.1.1/lib/capybara/selenium/driver.rb:80:in `reset!'":

  def reset!
...
@browser.navigate.to('about:blank')
...
end

我用另一个猴子补丁解决了这个问题:

  Capybara::Selenium::Driver.class_eval do
def reset!
end
end

关于ruby - 即使在 selenium ruby​​ 脚本完成后如何让浏览器保持打开状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7555416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com