解决UI自动化中无法定位跳转窗口的元素

通常我们在进行自动化测试的时候,想要对页面的元素进行定位,但是窗口会进行跳转,此时新窗口里面的元素无法进行定位,那么应该怎么办呢?

比如:我们想要打开百度浏览器,然后点击“新闻”,然后定位“帮助”的元素

 

 

 

 

 

我们可以先试试直接定位元素,然后执行以下代码

from selenium import webdriver
import time
driver = webdriver.Firefox()
url = "https://www.baidu.com/"
driver.get(url)
def test_input_01():
input_01 = driver.find_element('xpath',"//a[text()='新闻']").click()
time.sleep(3)
input_02 = driver.find_element('xpath',"//a[text()='帮助']").click()
test_input_01()

  我们可以发现,只想上述代码之后会报错。其实那就是因为帮助在新打开的窗口里面,没有和新闻在同一个窗口,所以打开百度之后可以先定位到新闻,然后就无法定位到帮助这个元素了,那么我们就要解决以上所遇到的问题

  说到这里,就要再引入一个概念,叫做句柄

  句柄:是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等。Windows之所以要设立句柄,根本上源于内存管理机制的问题,即虚拟地址。

那么如何进行窗口的切换呢?

from selenium import webdriver
import time
driver = webdriver.Firefox()
url = "https://www.baidu.com/"
driver.get(url)
def test_input_01():
input_01 = driver.find_element('xpath',"//a[text()='新闻']").click()
time.sleep(3)
#打印句柄
# print(driver.window_handles)
#使用下标的方式定位到想要的窗口(句柄),然后进行元素定位
driver.switch_to.window(driver.window_handles[-1])
input_02 = driver.find_element('xpath',"//a[text()='帮助']").click()
test_input_01()

  通过以上方式,先找到对应的新窗口,然后再进行元素定位即可。

 

posted @ 2021-03-26 23:19  青春风采  阅读(722)  评论(0)    收藏  举报