在 Python/Selenium 中将焦点更改为新窗口

Posted

技术标签:

【中文标题】在 Python/Selenium 中将焦点更改为新窗口【英文标题】:Changing focus to a new window in Python/Selenium 【发布时间】:2021-12-25 03:38:22 【问题描述】:

正如标题所说,我无法使用“driver.switch_to_window”让我的代码专注于新窗口。

我的任务是: 单击父页面上的按钮 > 出现新窗口 > 单击新窗口上的“接受”按钮并继续执行其余代码

driver.get("https:testpage.com/")
driver.find_element_by_xpath("/html/body/div[1]/div[1]/main/div/div/div/div[2]/ul/li[1]/button").click()

#here the window appears
time.sleep(2)

driver.switch_to_window("windowName")
driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div/div[3]/button[2]").click() #here nothing happens 



【问题讨论】:

您需要窗口句柄。基本上你想先得到当前的窗口句柄。 (driver.getWindowHandle())... 新窗口打开后,获取所有窗口句柄 (driver.getWindowHandles()) 并遍历它们以找到不是原始句柄的那个。 (因为无法保证索引顺序...)请参阅此线程:***.com/questions/45476200/… 另外请记住,新窗口可能尚未完成加载...最好在查找元素时使用 webdriverwait。 (以及更多有针对性的 xpath) 【参考方案1】:

您可以尝试获取页面源,以便确定驱动程序是否已切换:

html_source = browser.page_source

它可能已经切换,但您的元素未加载或在 iframe 中。如果您的元素存在,那么您可以尝试使用不同的相对 XPath,例如找到最近的 id 并从中找到你的元素:

//div[@id='someid']//button[text()='someText'] 

我不使用绝对 XPath,因为我认为它们太脆弱了。

参考:Python Selenium accessing HTML source

What is the difference between absolute and relative xpaths? Which is preferred in Selenium automation testing?

【讨论】:

以上是关于在 Python/Selenium 中将焦点更改为新窗口的主要内容,如果未能解决你的问题,请参考以下文章

textFieldShouldReturn 无法在 swift 3 中将焦点从一个文本字段更改为另一个文本字段

在android中将键盘输入类型更改为大写

如何在 IE9 中将 Enter 转换为 Tab(焦点更改)?它在IE8中工作

在焦点 jquery 上将占位符输入类型文本更改为密码

更改为多行后文本输入失去焦点

JavaFX TextField 在焦点上将填充更改为 0