zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    css中span元素的width属性无效果原因及多种解决方案
    CentOS、Ubuntu、Debian三个linux比较异同
    linux系统中/etc/syslog.conf文件解读
    /proc/interrupts 和 /proc/stat 查看中断的情况
    网卡优化RPS/RFS
    关于Linux网卡调优之:RPS (Receive Packet Steering)
    rsync详解之exclude排除文件
    Linux rsync 同步实践
    CentOS 6.3下rsync服务器的安装与配置
    解决linux下/etc/rc.local开机器不执行的原因
  • 原文地址:https://www.cnblogs.com/superbaby11/p/15703459.html
Copyright © 2011-2022 走看看