在提出这些问题但未能找到答案之前,我做了很多研究。
我正在尝试使用Ruby Selenium + Webdriver自动化网站。打开新窗口后,我遇到了脚本挂起的问题。我无法专注于新窗口或做任何其他事情。
以下是打开新窗口的代码:
<a id="theField" class="RightTextHeading" onclick="javascript:openTheWindow('someInfo.aspx?type=','300','300');if(window.document.RetValue == '5'){window.parent.LoadinIframe('someStuff.aspx?info=N&Stuff=','Some Data here > Full View','false');}; return false;" href="../MoreStuff/#" style="text-decoration: none;">ClickMe <span class="context"> opens an overlay</span></a>
这是我的红宝石代码:
require 'rubygems'
require 'watir-webdriver'
require 'selenium-webdriver'
prefs = {
:download => {
:prompt_for_download => false,
:default_directory => '.'
}
}
client = Selenium::WebDriver::Remote::Http::Default.new
#client.timeout = 600 # seconds - default is 60
client.timeout = 30 # seconds - default is 60
d = Selenium::WebDriver.for :chrome, :prefs => prefs, :http_client => client
b = Watir::Browser.new d
saved_cookies = b.cookies.to_a
b.goto'https://somewebsite.com'
begin
b.iframe(:id => 'iframeBody').a(:id => "somelink").click
rescue
puts 'Rescue'
end
sleep 2
puts "before"
#if b.window(:title=>"The new window").exists?
#puts " Test passed. New window opened!"
#else
#puts " Test Failed! No window found"
#end
#b.window(:title => /The new window/).use do
#b.window.last.use do
# puts "here"
#end
#puts b.window(:title => "The new window").exists?
puts b.windows.size
puts "after"
#b.close
我已经评论了我试图使这项工作的不同事情。 似乎Ruby只是在新窗口打开后坐下等待,我不知道如何让它退出等待状态。
如果我没有开始/救援,代码会停止执行,直到它超时。 当我想要拯救时,我可以控制回来,但仍然无法专注于新窗口。
任何想法都表示赞赏? 如果您还有其他问题,请与我们联系。
谢谢, -Andrey
答案 0 :(得分:0)
我不完全确定您尝试使用该测试做什么,但是如何使用新窗口执行某些操作的答案在某种程度上已经存在于您的代码中
#b.window.last.use do
应该是
#b.windows.last.use
或
@browser.windows.last.use
一旦出现,您的测试将开始使用新窗口。
根据您尝试执行的操作,可能会更改代码中该行的位置。但是,这将允许您访问新窗口并与之交互。