如何在Selenium for Python中切换到新窗口? - python

我正在使用Python开发硒自动化项目

我遇到一个问题,正在处理多个浏览器窗口。

方案如下。当我单击主页上的链接时,将打开一个新窗口。在新打开的窗口中,我无法执行任何操作,因为焦点仍然位于主页Web驱动程序上。

有人可以告诉我如何将焦点从背景窗口更改为新打开的窗口吗?

可能的解决方案是driver.switch_to.window(),但是它需要窗口的名称。如何找出视窗名称?如果这样做是错误的方法,有人可以提供一些代码示例来执行此操作吗?

参考方案

您可以使用window_handlesswitch_to_window方法来做到这一点。

在单击链接之前,首先将窗口句柄存储为

window_before = driver.window_handles[0]

单击链接后,将新打开的窗口的窗口句柄存储为

window_after = driver.window_handles[1]

然后执行切换到窗口方法如何移动到新打开的窗口

driver.switch_to_window(window_after)

同样,您可以在新旧窗口之间切换。以下是代码示例

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

class GoogleOrgSearch(unittest.TestCase):

     def setUp(self):
         self.driver = webdriver.Firefox()

    def test_google_search_page(self):
         driver = self.driver
         driver.get("http://www.cdot.in")
         window_before = driver.window_handles[0]
         print window_before
         driver.find_element_by_xpath("//a[@href='http://www.cdot.in/home.htm']").click()
         window_after = driver.window_handles[1]
         driver.switch_to_window(window_after)
         print window_after
         driver.find_element_by_link_text("ATM").click()
         driver.switch_to_window(window_before)


    def tearDown(self):
    self.driver.close()

if __name__ == "__main__":
unittest.main()

如何更改for循环的索引? - python

假设我有一个for循环:for i in range(1,10): if i is 5: i = 7 如果要满足特定条件,我想更改i。我试过了,但是没用。我该怎么办? 参考方案 对于您的特定示例,这将起作用:for i in range(1, 10): if i in (5, 6): continue 但是,最好使用while循环:i = 1 while i…

找不到满足python要求的版本 - python

我试图从here在macOS中使用python2创建虚拟环境。在终端中运行pip install virtualenv命令时,出现以下错误。Could not find a version that satisfies the requirement virtualenv (from versions: ) No matching distribution …

glob.glob for python中的正则表达式用法 - python

import glob list = glob.glob(r'*abc*.txt') + glob.glob(r'*123*.txt') + glob.glob(r'*a1b*.txt') for i in list: print i 此代码用于列出当前文件夹中名称为“abc”,“123”或“a1b…

生成器表达式组合线理解执行步骤 - python

                                                                                                                    [print(x) for x in ((x ** 2) for x in range(5))] 输出0 1 4 9 16 [N…

将元组的整数转换为元组的字符串 - python

我想将元组的整数转换为元组的字符串。例如:data = [(2,3,4,...),(23,42,54,...),......] 会导致:d = [('2','3','4',...),('23','42','54',....)......] …