• Web自动化成长之路:selenium中三种等待方式/三大切换操作


             前言:selenium中三种等待方式/三大切换操作指的是什么呢?其实就是三种等待方式、三种切换窗口方式,具体如何使用呢,我们接下来一起看看吧

    一、三大等待方式

    —— 强制等待

    强制等待:强制等待多少秒(单位)

    1. import time
    2. time.sleep(3)

    ——隐形等待

    隐形等待:不做用户感知的等待,等待页面元素加载完成后结束等待

    1. #只能用来等待元素出现
    2. #启动浏览器,只需要设置一次
    3. driver.implicitly_wait(5) #单位秒

    ——显性等待

    #等待的条件:直到页面的标题当中包含“学习Python”
    #wait....until....title_contains("学习Python")
    #时间超出了,就会报错

    ——显性等待—等待元素加载

    1. from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
    2. from selenium.webdriver.support import expected_conditions ----导入显性条件库
    3. locaror = ['id','kw']##要传的元素
    4. elem = wait.until(expected_conditions.presence_of_all_elements_located(locaror))#加载元素

    ——显性等待—等待元素可见

    1. from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
    2. from selenium.webdriver.support import expected_conditions ----导入显性条件库
    3. locaror = ['id','kw']
    4. elem = wait.until(expected_conditions.visibility_of_all_elements_located(locaror)) #等待元素可见

    ——显性等待—等待元素可被点击

    1. from selenium.webdriver.support.wait import WebDriverWait ---导入显性等待库
    2. from selenium.webdriver.support import expected_conditions ----导入显性条件库
    3. locaror = ['id','kw']
    4. elem = wait.until(expected_conditions.element_to_be_clickable(locaror)) #等待元素可以被点击

    二、三大等待方式

    a) 句柄-窗口切换

    1.切换窗口需要句柄---句柄相当于窗口的ID

    2.打印所有句柄,显示是列表,列表中最后一个ID就是最新打开的窗口
    print(drvice.window_handles)

    3.将窗口的句柄传进去
    drvice.switch_to.window(drvice.window_handles[-1])  #这里-1就是取下标,倒数第一个窗口就是最新打开的窗口

    ——通过句柄-窗口切换示例:

    1. 例子:
    2. from selenium import webdriver
    3. import time
    4. from selenium.webdriver.support.wait import WebDriverWait
    5. from selenium.webdriver.support import expected_conditions
    6. drvice = webdriver.Chrome()
    7. drvice.implicitly_wait(10)
    8. drvice.get("http://www.baidu.com")
    9. elem = drvice.find_element("id","kw")
    10. elem.send_keys("浩仔")
    11. elem.submit()
    12. drvice.find_element_by_link_text("京东").click()
    13. time.sleep(5)
    14. #切换窗口
    15. #输入窗口的句柄传进去
    16. print(drvice.window_handles)
    17. drvice.switch_to.window(drvice.window_handles[-1])
    18. time.sleep(5)
    19. print(drvice.title)

    ——显性等待-窗口切换:

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions


    wait.until(expected_conditions.new_window_is_opened(all_handles))#打开新窗口,当获取当前所有窗口句柄

    ——显性等待-窗口切换示例:

    1. 例子:
    2. all_handles = drvice.window_handles#获取当前所有窗口句柄,这个代码一定要先放到新窗口打开前
    3. drvice.find_element_by_link_text("京东").click()
    4. #显性的等待,等待新窗口出现
    5. wait = WebDriverWait(drvice,2)#初始化等待器,等待2S
    6. wait.until(expected_conditions.new_window_is_opened(all_handles))#打开新窗口,当获取当前所有窗口句柄

    b) iframe内嵌网页切换

    ——进入(切换)iframe:

    1. 进入iframe,需要的三种标识:
    2. 提供iframe的标识:1.index 2.name 3.Webelement
    3. driver.switch_to.frame("iframeResult")#通过name去查找

    iframe在网页中标识:

    ——进入iframe后退出:

    1. #退回主界面
    2. driver.switch_to.default_content()  --如果一直不退出 就一直在iframe页面里面了
    3. #退回父级iframe——如果有多层iframe可以使用此方法
    4. driver.switch_to.parent_frame()

    ——iframe切换:显性等待

    WebDriverWait(drvice,5).until(expected_conditions.frame_to_be_available_and_sitch_to_it(iframe))

    b) 切换至alert:弹窗

    1. my_al = driver.switch_to.alert #切换到alert,点击确定,没有括号,也没有传参数,全局只有一个
    2. my_al.accept()#点击确定
    3. my_al.dismiss()#点击取消

    ——alert切换:显性等待

    WebDriverWait(drvice,5).until(expected_conditions.alert_is_present)
  • 相关阅读:
    Qt使用QListWidget实现自定义Item效果
    .Net Web项目创建比较不错的参考文章
    CentOS 中启动 Jar 包
    DML语句(增、删、改)
    Type-C接口介绍
    深谈个人对新技术的看法
    openGauss3.1.0 版本的gs_stack功能解密
    CAS:407627-60-5_AF647-NHS酯_Alexa Fluor 647荧光染料
    [AIGC] Java 函数式编程
    (十三)强缓存和协商缓存的区别
  • 原文地址:https://blog.csdn.net/qq_41130705/article/details/126317626