Ray*_*ndS 6 ruby selenium webdriver
我试图从selenium-webdriver(ruby)实现以下方法
require "rubygems"
require "selenium-webdriver"
require "test/unit"
class SwitchToPopup3 < Test::Unit::TestCase
def setup
@driver = Selenium::WebDriver.for :firefox
@base_url = (URL of my test website)
@driver.manage.timeouts.implicit_wait = 30
@verification_errors = []
end
def teardown
@driver.quit
assert_equal [], @verification_errors
end
def test_switch_to_popup3
.
.
puts @driver.get_all_window_ids()
puts @driver.get_all_window_titles()
puts @driver.get_all_window_names()
.
.
end
Run Code Online (Sandbox Code Playgroud)
我一直得到的错误是
NoMethodError: undefined method `get_all_window_ids' for # <Selenium::WebDriver::Driver:0x101e4b040 browser=:chrome>
/Users/rsucgang/Documents/Aptana Studio 3 Workspace/Testing/SwitchToPopup2.rb:37:in `test_switch_to_popup3'
Run Code Online (Sandbox Code Playgroud)
我研究了selenium-webdriver的ruby绑定文档
最终我的目标是运行我的自动化脚本:
我在网上搜索并研究了这个,我没有得到任何太多的信息.
谢谢,如果您需要更多信息,请告诉我.
小智 9
贾斯汀,你有一个很好的方法.但是假设窗口句柄将以正确的顺序返回有一个问题.并非所有浏览器都是这种情况.我在我的免费每周Selenium提示通讯(elemental-selenium.com)中概述了一种稍微不同的方法.
它是这样的:
@driver.get 'http://the-internet.herokuapp.com/windows'
main_window = @driver.window_handle
@driver.find_element(css: '.example a').click
windows = @driver.window_handles
windows.each do |window|
if main_window != window
@new_window = window
end
end
@driver.switch_to.window(main_window)
@driver.title.should_not =~ /New Window/
@driver.switch_to.window(@new_window)
@driver.title.should =~ /New Window/
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到完整的提示.
问题是get_all_window_idsSelenium :: Client而不是Selenium :: Webdriver.我相信Selenium :: Client是旧版Selenium,API与Selenium :: Webdriver不同(见这里).由于您使用的是Selenium :: Webdriver,这就解释了为什么会出现"未定义方法"错误.
对于Selenium :: Webdriver,我知道如何在窗口之间切换的唯一方法是使用:
@driver.switch_to.window("<window_handle>")
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式获取所有已知的window_handles:
@driver.window_handles
#=> Returns all window handles as an array of strings
Run Code Online (Sandbox Code Playgroud)
如果要切换到刚刚打开的弹出窗口,可以执行以下操作.请注意,这假设.window_handles是按窗口打开的顺序,我认为是真的:
@driver.switch_to.window @driver.window_handles.last
Run Code Online (Sandbox Code Playgroud)
总而言之,假设您只关心访问弹出窗口(而不是关于按名称访问),您可以:
#Click control that opens popup
@driver.find_element(:id, 'button that opens popup').click
#Switch to popup
@driver.switch_to.window @driver.window_handles.last
#Do actions in new popup
@driver.find_element(:id, 'id of element in popup').click
Run Code Online (Sandbox Code Playgroud)
请注意,如果在使用弹出窗口后,您将需要返回到原始窗口,那么我建议您执行以下操作.通过将块传递给switch_to.window,块将在弹出窗口中执行,当块结束时@driver将自动指向原始窗口.
#Click control that opens popup
@driver.find_element(:id, 'button that opens popup').click
#Switch to popup
@driver.switch_to.window( @driver.window_handles.last ){
#Do actions in new popup
@driver.find_element(:id, 'id of element in popup').click
}
#Continue with original window
@driver.find_element(:id, 'button in original window').click
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27518 次 |
| 最近记录: |