• selenium 多窗口切换


    在做web自动化的时候,经常会遇到点击一个元素弹出了一个新的窗口,我们需要进入到新的窗口中,进行自动化操作,那么我们如何跳转到新的窗口上呢? 

    切换新窗口

    在浏览器上遇到新的窗口打开的时候,因为脚本不知道我们想要跳转到那个窗口上,先获取全部窗口信息,然后进行选择窗口进行跳转,这里窗口是通过句柄的方法进行识别的。这里就用到了selenium中的3个方法,获取当前窗口句柄的方法,和获取全部窗窗口句柄的方法,以及跳转到窗口句柄的方法

    获取当前窗口句柄

    通过方法: current_window_handle 

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("博客园")
    driver.find_element_by_id("su").click()
    handle = driver.current_window_handle
    print(handle)
    CDwindow-C439E20E72721D85DBAD47EEF83BD6CD

     获取全部窗口句柄

    通过方法: window_handles 

    执行完结果为列表显示内容,最后一个弹出框为最后一个。

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("博客园")
    driver.find_element_by_id("su").click()
    handle = driver.current_window_handle
    print(handle)
    time.sleep(2)
    driver.find_element_by_xpath("//*[contains(text(),'开发者的网上家园')]").click()
    time.sleep(2)
    handles = driver.window_handles
    print(handles)

     ['CDwindow-0EFAD51458B9F6FEE8A46AA3DB578317', 'CDwindow-3197BFABC1F3E841CB3F2E65E388AB4E']

    跳转到对应的窗口

    如何查看窗口的句柄已经了解到了,如何跳转到对应的句柄上呢?我们可以通过方法 switch_to.window() 

    switch_to_window()和前面说的iframe方法一样,官方不推荐使用,我们可以通过switch_to.window()方法来操作

    import time
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("博客园")
    driver.find_element_by_id("su").click()
    #打印当前窗口的句柄
    handle = driver.current_window_handle
    print(handle)
    time.sleep(2)
    driver.find_element_by_xpath("//*[contains(text(),'开发者的网上家园')]").click()
    time.sleep(2)
    # 打印当前全部窗口的句柄
    handles = driver.window_handles
    print(handles)
    # 跳转到对应的窗口
    driver.switch_to.window(handles[-1])
    #打印当前窗口的句柄
    ha = driver.current_window_handle
    print(ha)
    print(driver.title)
    博客园 - 开发者的网上家园

    通过显示等待判断窗口是否出现

    我们可以通过显示等待的方法加上判断窗口是否出现的方法进行来减少我们的运行时间和避免运行错误。

    判断窗口出现方法前面有 new_window_is_opened() 这里需要传的的参数是窗口的数量,通过判断窗口是否增加

    # -*- coding:utf-8 -*-
    
    
    import time
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Chrome()
    driver.get("https://www.baidu.com")
    driver.find_element_by_id("kw").send_keys("博客园")
    driver.find_element_by_id("su").click()
    #打印当前窗口的句柄
    handle = driver.current_window_handle
    print(handle)
    # 打印当前全部窗口的句柄
    handles = driver.window_handles
    print(handles)
    driver.find_element_by_xpath("//*[contains(text(),'开发者的网上家园')]").click()
    WebDriverWait(driver,10,0.5).until(EC.new_window_is_opened(handles))
    handles2 = driver.window_handles
    print(handles2)
    # 跳转到对应的窗口
    driver.switch_to.window(handles[-1])
    #打印当前窗口的句柄
    ha = driver.current_window_handle
    print(ha)
    print(driver.title)

    原文链接:

    selenium---多窗口切换 - 测试-安静 - 博客园 (cnblogs.com)

  • 相关阅读:
    SAP問題點(一)
    都是粗心惹的禍
    学习笔记<一>
    灰色心情
    SAP问题点(二)
    AngularJS Unknown provider报错
    Nginx随笔
    Nginx配置限制IP访问
    Windows The task you are trying to do can't be completed because Remote Desktop Services is currently busy. Please try again in a few minutes. Other users should still be able to log on
    在DOS使用NotePad++打开文件
  • 原文地址:https://www.cnblogs.com/superbaby11/p/15703459.html
Copyright © 2020-2023  润新知