zoukankan      html  css  js  c++  java
  • selenium自动化中的三大切换

    三大切换分为:窗口切换、iframe切换、alert弹框处理(非HTML弹框)      ps(使用的HTML文件这里获取,提取码:t0n7)

    一、窗口切换

    1、需要知道你要切换的窗口叫什么?--句柄。 获取当前会话浏览器打开的所有窗口句柄 

    通过:driver.window_handles  -- 把句柄存储在 “列表” 中,按照窗口出现的循序。

    2、切换过去:driver.seitch_to.window(window的句柄)。

    3、进入了新的页面,元素操作都只针对新的页面。


    from
    selenium import webdriver import time from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("file:///E:/WebWebpageTest/page.html") driver.maximize_window() # 最大化浏览器 # 定位表达式,跳转新页面点击的元素 loc = (By.XPATH, '//a[@id="ZCA"]') WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc)) # 点击元素出现新的页面 driver.find_element(*loc).click() # 新的窗口出现了 # 等待有新的窗口出现,再去切换窗口 time.sleep(0.5) # 有时候立即去获取窗口取不到值 # 获取所有窗口的句柄 wins = driver.window_handles print('所有的窗口句柄', wins) # 返回当前窗口的句柄 cur_win = driver.current_window_handle print('当前的窗口句柄是:', cur_win) # 切换到最新打开的窗口 driver.switch_to.window(wins[-1]) print('最新的窗口句柄是:', wins[-1]) # 定位表达式,新页面输入框元素 loc = (By.XPATH, '//input[@id="userA"]') WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc)) # 在新的窗口输入数据 driver.find_element(*loc).send_keys('这是新窗口') # 查看成果 time.sleep(3) driver.quit()

    二、iframe切换

    iframe就是HTML页面里面嵌套另一个HTML页面,

    如果你要操作的元素,在iframe当中,那么必要切换到iframe 

    1、你的元素是否在iframe里面

    2、找到这个iframe

    3、切换到iframe 

    通过查看路径就可以看到有两个HTML 和一个iframe,就说明3在2的里面,就需要切换iframe


    切换iframe,支持传的三个参数 1、iframe元素的name,

                   2、iframe元素的下标(从0开始),

                   3、iframe对应的WebElement对象(通过元素的八大元素定位)

    from selenium import webdriver
    import time
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    driver.get("file:///E:/WebWebpageTest/page.html")
    driver.maximize_window()  # 最大化浏览器
    
    # 切换iframe 三种类型的传递
    driver.switch_to.frame('myframe1')  # name
    # driver.switch_to.frame(0)  # 下标
    # driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@id="idframe1"]'))  # 通过八大定位方式
    # 切换完成之后,就是一个新的HTML页面里面的定位
    
    # 定位表达式,页面输入框元素
    loc = (By.XPATH, '//input[@id="userA"]')
    WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc))
    # 在窗口输入数据
    driver.find_element(*loc).send_keys('切换到iframe内部')
    # 查看成果
    time.sleep(3)
    
    # 切出来,直接切换到默认的主页面,最外层的HTML页面
    driver.switch_to.default_content()
    # 切到上一个iframe (多层嵌套)
    # driver.switch_to.parent_frame()
    
    loc = (By.XPATH, '//input[@id="user"]')
    WebDriverWait(driver, 30).until(EC.visibility_of_element_located(loc))
    # 在窗口输入数据
    driver.find_element(*loc).send_keys('切换到默认的主页面')
    
    driver.quit()

    三、alert弹框处理

    它不是HTML元素,是js弹框,不能使用F12定位

    操作流程:非HTML元素

         使用 alert 类 ,操作元素导致非HTML元素出现

         1、切换到它

         2、将他关闭或其他操作

    弹框的四个操作
    al.dismiss() # 取消
    al.accept() # 确定
    print(al.text) # 获取弹出框的文本
    send_keys # 弹出框输入

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get("file:///E:/WebWebpageTest/page.html")
    driver.maximize_window()  # 最大化浏览器
    
    # 点击出现非HTML弹出框
    driver.find_element_by_id('alert').click()
    time.sleep(1)
    
    # 切换弹框 需要接收返回的对象
    al = driver.switch_to.alert
    
    # 弹框的四个操作
    print(al.text)  # 获取弹出框的文本
    # al.dismiss()  # 取消
    al.accept()  # 确定
    # al.send_keys()  # 弹出框输入
    # 暂停看操作
    time.sleep(1)
    
    driver.quit()
  • 相关阅读:
    怎样才能充分利用SQL索引
    MS SQL存储过程编写经验和优化措施
    ASP調用存講過程總結
    調用外部的DLL(DllImportAttribute)
    MS SQL中的行轉列
    SQL Server乐观锁定和悲观锁定实例
    如何使用 JScript 從 HTML 網頁自動化 Excel
    了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
    C#語法學習結構(Struct)
    四项技术 助你提高SQL Server的性能
  • 原文地址:https://www.cnblogs.com/yongzhuang/p/12498547.html
Copyright © 2011-2022 走看看