如何处理driver在多个窗口之间切换?
有时候会出现这样的情况,在一个页面A点击一个链接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是接下来的脚本是在操作页面B的元素,这样就造成了找不到元素的报错。通过selenium中swich_to.window()方法来处理这个问题。
练习场景:打开百度新闻(页面A),点击热点新闻中第一个新闻链接,会在第二个窗口打开这个新闻的具体详情页(页面B),测试需要去判断你点击这个新闻,打开详情页是否正确。
问题拆分:
1.我们已经知道switch_to.window()方法可以处理窗口切换问题;
2.在页面A跳转到页面B之前,我们需要用一个变量保存这个新闻的标题;
3.切换页面B后,我们获取这个新闻标题,然后和前面这个变量保存的值去对比,如果相等,那么就测试通过。
具体步骤:
具体代码:
# coding=utf-8 import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() # 获取新闻的标题,点击新闻 driver.get('http://news.baidu.com/') time.sleep(1) # 获取目标新闻标题 news=driver.find_element_by_link_text("全球抗疫的时代之问") pagel_news_title=news.text print(pagel_news_title) news.click() #切换窗口,因为打开新的标签页,selenium还是停留在上一个窗口,所以要用脚本切换窗口 handles = driver.window_handles #获取所有的句柄 print(handles) time.sleep(10) for handle in handles: if handle != driver.current_window_handle: # print('切换窗口',handle,driver.current_url,driver.current_window_handle) print(handle) # B页面句柄 driver.close() driver.switch_to.window(handle)# 切换窗口 page2_news_title = driver.title #获取当前新闻标题 print(page2_news_title) print(pagel_news_title) # 判断打开后的字符串是否有包含原来的标题 try: assert pagel_news_title in page2_news_title print('test pass.') except Exception as e: print('test fail:',format(e))
总结:
2.获取全部窗口的句柄;
3.用for循环遍历,发现一个句柄和当前句柄不匹配;
4.打印,关闭A窗口,切换到B窗口;
参考文章:https://blog.csdn.net/u011541946/article/details/70132672
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。