• Appium脚本(5) 元素等待方法示例


    思考

    在自动化过程中,元素出现受网络环境,设备性能等多种因素影响。因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已。那么如何解决这个问题呢?

    元素等待作用

    设置元素等待可以更加灵活的制定等待定位元素的时间,从而增强脚本的健壮性,提高执行效率。

    元素等待类型

    强制等待

    设置固定的等待时间,使用sleep()方法即可实现

    from time import sleep

    #强制等待5秒

    sleep(5)

    隐式等待

    隐式等待是针对全部元素设置的等待时间

    driver.implicitly_wait(20)

    显式等待

    显式等待是针对某个元素来设置的等待时间。

    方法WebDriverWait格式参数如下:

    from selenium.webdriver.support.ui import WebDriverWait

     

    WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

    driver : WebDriver

    timeout : 最长超时时间,默认以秒为单位

    poll_frequency : 休眠时间的间隔时间,默认为0.5秒

    ignored_exceptions : 超时后的异常信息,默认情况下抛NoSuchElementException异常。

    WebDriverWait()一般和until()或until_not()方法配合使用,另外,lambda提供了一个运行时动态创建函数的方法。

    from selenium.webdriver.support.ui import WebDriverWait

    WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("elementID"))

     

    实战案例

     1 from app.find_element.capability import driver
     2 from time import sleep
     3 from selenium.webdriver.support.ui import WebDriverWait
     4 
     5 # 等待元素方法汇总
     6 
     7 # 隐式等待(等待所有元素)
     8 driver.implicitly_wait(3)
     9 
    10 # 显示等待(等待特定元素出现)
    11 WebDriverWait(driver, 3).until(lambda x: x.find_element_by_id('com.tal.kaoyan:id/login_register_text'))
    12 driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()
    13 
    14 # 强制等待(秒)
    15 sleep(3)
    16 
    17 driver.close_app()
  • 相关阅读:
    hdu 1426 Sudoku Killer
    hdu 1426 Sudoku Killer
    hdu 1372 Knight Moves
    hdu 1372 Knight Moves
    在 MySQL 中查找含有目标字段的表
    又一次编译无效数据库组件
    POJ 3468 A Simple Problem with Integers(线段树功能:区间加减区间求和)
    CodeForces 42C Safe cracking 规律题
    博客搬家啦!!!!!!!!!!!!!!!!!!!!!!!!
    DML语句报错是因为控制文件无法扩大还是另有原因?
  • 原文地址:https://www.cnblogs.com/gongxr/p/10950591.html
Copyright © 2020-2023  润新知