• Python+Selenium练习(二十六)- 多窗口之间切换


      如何处理driver在多个窗口之间切换?

      有时候会出现这样的情况,在一个页面A点击一个链接,会触发在新Tab或者新窗口打开页面B,由于之前的driver实例对象在页面A,但是接下来的脚本是在操作页面B的元素,这样就造成了找不到元素的报错。通过selenium中swich_to.window()方法来处理这个问题。

      练习场景:打开百度新闻(页面A),点击热点新闻中第一个新闻链接,会在第二个窗口打开这个新闻的具体详情页(页面B),测试需要去判断你点击这个新闻,打开详情页是否正确。

      问题拆分:

      1.我们已经知道switch_to.window()方法可以处理窗口切换问题;

      2.在页面A跳转到页面B之前,我们需要用一个变量保存这个新闻的标题;

      3.切换页面B后,我们获取这个新闻标题,然后和前面这个变量保存的值去对比,如果相等,那么就测试通过。

      具体步骤:

      1.实现页面A切换到页面B;

      2.页面A和页面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_xpath('//*[@id="pane-news"]/div/ul/li[1]/strong/a')
    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)
    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))

    总结:

    1.先打印出窗口A(页面A)句柄,一个长字符串;

    2.获取全部窗口的句柄;

    3.用for循环遍历,发现一个句柄和当前句柄不匹配;

    4.打印,关闭A窗口,切换到B窗口;

    5.最后,做断言判断当前新闻标题是否是刚刚点击的新闻标题。

    参考文章:https://blog.csdn.net/u011541946/article/details/70132672

  • 相关阅读:
    计算机硬件
    队列、堆、栈、堆栈的区别
    操作系统与应用程序的关系
    DNS与HTTPDNS
    配置静态路由传送网络包
    django的nginx配置
    视频流和文件传输相关协议
    HTTPS 对称加密和非对称加密
    HTTP1.1/2.0与QUIC协议
    mysql join联表 + id自增
  • 原文地址:https://www.cnblogs.com/zhaocbbb/p/12651671.html
Copyright © 2020-2023  润新知