问题是,
get_all_window_ids它用于Selenium :: Client而不是Selenium ::
Webdriver。我相信Selenium :: Client是旧版本的Selenium,并且API与Selenium ::
Webdriver不同(请参见此处)。由于您使用的是Selenium
:: Webdriver,因此可以解释为什么出现“未定义的方法”错误。
对于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是按照打开窗口的顺序进行的,我认为这是事实:
@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将自动指向原始窗口。
#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


