当前位置: 首页 > 知识库问答 >
问题:

使用Selenium Webdriver切换窗口时出错

汪同
2023-03-14

我已经编写了一个Ruby脚本来自动化使用IE的一些用户操作。我正在为IE使用Selenium Web驱动程序。下面是我的代码。

require 'selenium-webdriver'

browser = Selenium::WebDriver.for :ie

first_window = browser.window_handle
browser.switch_to.frame(browser.find_element(:id=> 'outerFrame'))
browser.switch_to.frame(browser.find_element(:id=> 'innerFrame'))

table_rows = browser.find_element(:id=> 'AllItems').find_element(:tag_name=> 'table').find_elements(:tag_name=> 'tr')
count_cell = table_rows.at(table_rows.length-1).find_elements(:tag_name=> 'td').at(1).find_element(:tag_name=> 'a')
count_cell.click

sleep(5)

all_windows = browser.window_handles
new_window = browser.window_handles.last

browser.switch_to.window(new_window)

btn = browser.find_element(:id=> 'btn_export')
btn.click

在点击一个按钮后,会打开一个新页面。现在,当我尝试切换到新窗口时,我得到以下错误。

我试着通过修改防火墙和为端口5555添加规则来解决这个错误。即便如此,问题仍然存在。我发现了一些关于这方面的问题,但大多数都与Java或.NET有关。如何解决此错误?有人能给我指个正确的方向吗?

共有1个答案

林鸿飞
2023-03-14

我不是ruby专家,但我看到过类似的问题发生。我有一个Python解决方案。您所需要做的就是Ruby-fy代码。https://gist.github.com/ab9-er/08C3CE7D2D5CDFA94BC7

def change_window(browser):
    """
    Simple window switcher without the need of playing with ids.
    @param browser: Current browser instance
    """
    curr = browser.current_window_handle
    all_handles = browser.window_handles
    for handle in list(set([curr]) - set(all_handles)):
        return browser.switch_to_window(handle)
 类似资料:
  • 问题内容: 寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。 我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,我必须切换为仅使用Selenium WebDriver。(任何人都不知道这种方法是否有问题?) 在下面,您可以找到我用来创建se

  • 我想要一个横跨整个窗口宽度的。在没有任何特定设置的情况下设置my、和窗口时,这将按预期工作。当我设置,即使我的屏幕仅能容纳9个平铺。我没有为舞台手动设置任何尺寸。 当我的应用程序启动时,场景首先设置为宽度1,然后是320,然后是1920(当在1920x1080屏幕上启动时)。我正在运行XMonad(平铺窗口管理器),这可能会导致在显示窗口全屏之前,两者之间的宽度为320。 但是,在切换到另一个场景

  • 问题内容: 我有一个应用程序,允许用户选择一个选项,并根据用户选择从组件中删除一个JPanel,添加新的JPanel并重新验证该组件 看到代码: c是一个组件 我有几个JPanels,用户可以在它们之间切换,并且开关可以正常工作。但是,当我根据用户选择添加此JPanel时,以后添加的JPanels无法正确加载。是什么原因造成的? } 问题答案: 更好的方法是转向CardLayout。但是如果您想坚

  • 我一直在寻找这个问题的答案。我正在IE8中使用Selenium Webdriver和C#进行测试。在测试的某一点上,我需要单击一个按钮,然后打开一个新的应用程序窗口,其中包含需要填写的表单以继续测试。 我试过: 所以应该点击开始弹出事件的元素,然后开关应该把它放在弹出窗口上,这样我就可以继续测试了。现在的问题是。当单击时,我正在测试的应用程序创建一个弹出窗口,然后关闭该弹出窗口,然后出现另一个弹出

  • 问题内容: 寻找有关如何获得新的“弹出”窗口的帮助,该窗口在单击“登录”按钮后触发显示。 我能够到达显示窗口的时间,但是我不相信我当前用来获取窗口“句柄”的代码是否正常运行。我的情况有所不同,因为我在页面内使用量角器,但是出现的新窗口不是基于角度的,因此当我在该窗口中时,必须切换为仅使用Selenium WebDriver。(任何人都不知道这种方法是否有问题?) 在下面,您可以找到我用来创建sel