我正在尝试从 selenium-webdriver (ruby)实现以下方法
get_all_window_names
我运行Selenium IDE并将脚本导出到Ruby Test :: Unit。将其另存为.rb
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
我不断得到的错误是
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'
我研究了selenium-webdriver的红宝石绑定文档
http://selenium.googlecode.com/svn/trunk/docs/api/rb/Selenium/Client/GeneratedDriver.html#get_all_window_titles- instance_method
最终,我的目标是运行自动化脚本:
我已经在互联网上进行了搜索和研究,但没有得到太多信息。
谢谢,如果您需要更多信息,请告诉我。
问题是,get_all_window_ids它用于Selenium :: Client而不是Selenium :: Webdriver。我相信Selenium :: Client是旧版本的Selenium,并且API与Selenium :: Webdriver不同(请参见此处)。由于您使用的是Selenium :: Webdriver,因此可以解释为什么出现“未定义的方法”错误。
get_all_window_ids
对于Selenium :: Webdriver,我知道如何在Windows之间切换的唯一方法是使用:
@driver.switch_to.window("<window_handle>")
您可以通过以下方式获取所有已知的window_handles:
@driver.window_handles #=> Returns all window handles as an array of strings
如果要切换到刚打开的弹出窗口,可以执行以下操作。请注意,这.window_handles是按照打开窗口的顺序进行的,我认为这是事实:
.window_handles
@driver.switch_to.window @driver.window_handles.last
总而言之,假设您只关心访问弹出窗口(而不关心按名称访问),则可以执行以下操作:
#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
请注意,如果使用弹出窗口后,您将要返回到原始窗口,那么建议您执行以下操作。通过将一个块传递给switch_to.window,该块将在弹出窗口中执行,并且当该块结束时@driver将自动指向原始窗口。
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