zoukankan      html  css  js  c++  java
  • pythonselenium 3种等待方式

    一、等待 -- 3种等待方式

    1.1 强制等待

    #引入模块

    import time

    #某操作后 等待5s

    time.sleep(5)

    1.2 隐性等待

    #隐式等待60s -- 全局可用

    driver.implicitly_wait(60)

    1.3 显性等待

    明确等待某个条件满足之后,再去执行下一步操作。

    程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException

    WebDriverWait(driver,等待时长,轮循周期默认0.5s).until/until_not(expected_conditions模块.方法)

    expected_conditions期望的条件模块中提供了一系列的期望发生的条件,每个条件方法均是一个类

    如:WebDriverWait(driver,20).until(EC.presence_of_element_located(locator))

    实例1:直接定位元素

     1 #引入显性等待库
     2 
     3 from selenium.webdriver.support.wait import WebDriverWait
     5 from selenium.webdriver.support import expected_conditions as EC
     7 from selenium.webdriver.common.by import By
     8 
     9 #先确定元素定位表达式
    10 
    11 ele_locator = '//a[text()="_百度百科"'
    12 
    13 #元素定位方式--元组表达
    14 
    15 param = (By.XPATH,ele_locator)
    16 
    17 #WebDriverWait类(driver,等待时长,轮循周期).until(判断条件)
    18 
    19 #使用expected_conditions对应的方法生成判断条件 EC.方法名(定位方式,定位表达式)
    20 
    21 WebDriverWait(driver,20).until(EC.presence_of_element_located(param))

    实例2:切入再定位元素-iframe

    #方式1:直接使用Switch_to 切换到iframe
    # driver.switch_to.frame("login_frame_qq")

     1 #方式2:使用显性等待方式
     2 #iframe的name属性定位
     3 ele_locator = 'login_frame_qq'
     4 param = (By.NAME,ele_locator)
     5 #判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
     6 WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(param))
     7 time.sleep(3)
     8 #点击账号密码登录
     9 driver.find_element_by_xpath('//a[@id="switcher_plogin"]').click()
    10 time.sleep(2)

    expected_conditions模块中常用方法:

    title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值

    title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值

    presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该元素一定可见

    visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0

    visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了

    presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是‘column-md-3‘,那么只要有1个元素存在,这个方法就返回True

    text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串

    text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串

    frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False

    invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见

    element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable

    staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False

    element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表

    element_selection_state_to_be : 判断某个元素的选中状态是否符合预期

    element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

    alert_is_present : 判断页面上是否存在alert弹框

    new_window_is_opened:新窗口打开,期望新窗口将被打开并拥有,增加窗口句柄

    参考文档:http://www.bubuko.com/infodetail-1979606.html


    seleium中各入参点区分

    locator = '//span['xx']'

    driver = webdriver.Chrome()

    webelement = driver.find_element_by_xpath(locator)

  • 相关阅读:
    node起本地服务器以及实现代理,前端接口转发
    一键前端代理,一行命令开启nginx容器,代理前端页面
    go语言学习笔记
    patch需要数据格式前端算法,patch算法基础,两个对象对比取差异属性
    react-native中使用Echarts,自己使用WebView封装Echarts经验
    如何用js自己实现Animate运动函数
    vue中的表单异步校验方法封装
    Entity Framework6使用SQL Server Compact免安装部署
    WCF异常传播
    解决.net的堆碎片化带来的内存占用过大的问题
  • 原文地址:https://www.cnblogs.com/simran/p/9237449.html
Copyright © 2011-2022 走看看