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

如何切换到窗口或标签在splinter webdriver Python?

古弘
2023-03-14

我对python和Splint是新手。我阅读了关于splinter的文档,但它没有提到selenium库中关于switch_to like的任何内容。

当我运行这段代码时,我得到一个错误。

  from splinter import Browser

  browser = Browser("firefox")
  browser.visit('http://google.com')
  window1 = browser.windows[0] #google
  browser.execute_script("window.open('https://www.amazon.com/');")
  window2 = window1.next #amazon active window
  browser.driver.switch_to.window(window1) #switch back to google

任何想法都欢迎。谢了!

共有1个答案

杨星纬
2023-03-14

试试这个(这是工作):

# Get parent window
 parent_window = self.browser.driver.current_window_handle
# Open new page in child window
self.browser.driver.execute_script("window.open('http://google.com')")
 # Get list of all windows currently opened (parent + child)
 all_windows = self.browser.driver.window_handles
 # Get child window
 child_window = [window for window in all_windows if window != parent_window][0]
 # Switch to child window
 self.browser.driver.switch_to.window(child_window)
 # Close child window
 self.browser.driver.close()
 # Return to parent window
 self.browser.driver.switch_to.window(parent_window)
 类似资料:
  • 我正在使用Python进行selenium自动化项目。 我面临一个问题,这是处理多个浏览器窗口。 场景如下所示。当我单击主页上的链接时,将打开一个新窗口。在新打开的窗口中,我无法执行任何操作,因为焦点仍然在主页web驱动程序上。 谁能告诉我如何将焦点从背景窗口转换到新打开的窗口? 一种可能的解决方案是,但它需要窗口的名称。如何找出窗口的名字?如果这是一个错误的方法,谁能给出一些代码例子来执行这个操

  • > 我正在将控件从父窗口传递到子窗口 我正在子窗口中执行操作 执行后,将从子窗口再打开一个窗口(第一个子窗口的子窗口)。 我必须关闭两个子窗口并返回父窗口。 我无法将控件从子窗口切换到父窗口。我已经试用了下面的代码 /在子窗口中执行操作/

  • 我正在尝试使用制作游戏,最后会弹出一条消息,显示游戏在消息上,并显示再次玩的选项。 当我按下“再次播放”按钮时,按下该键时,播放器精灵根本不会移动。 然后我发现它正在发生,因为在我按下消息框按钮后,它没有将焦点更改为活动的窗口。 如果有人能告诉我如何更改对焦窗口,那会很有帮助。

  • 我正在使用: Chrome55.0.2 Selenium WebDRiver 3.0.1与ChromeDRiver C#4.6.1(VS2015社区版) 我正在编写打开Chrome的自动化代码,打开一个选项卡,并导航到一个主页面URL。这个主页有我解析生成二级页面URL的信息。我的问题是,我不能编写在二级页面加载后切换回主页选项卡的代码,也不能编写从不离开主页的代码。我将解释我所追求的两个选择:

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

  • 问题内容: 我正在寻找一种方法,以在浏览器中的多个选项卡或窗口之间进行通信(在同一个域中,而不是在CORS上)而不会留下痕迹。 第一个可能是最糟糕的解决方案-您需要从当前窗口中打开一个窗口,然后您只能在保持窗口打开状态下进行通信。如果您在任何窗口中重新加载页面,则很可能失去了通信。 使用postMessage的第二种方法可能启用了跨域通信,但是遇到了与第一种方法相同的问题。您需要维护一个窗口对象。