Appium元素等待(交易宝)

Appium元素等待
思考
在自动化过程中,元素出现受网络环境,设备性能等多种因素影响。因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已。那么如何解决这个问题呢?
元素等待作用
设置元素等待可以更加灵活的制定等待定位元素的时间,从而增强脚本的健壮性,提高执行效率。
元素等待类型
强制等待

设置固定的等待时间,使用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"))

实战案例
测试场景
交易宝登录之后显示等待【绑定账号】按钮,然后点击。
jiaoyibao_element.wait.py

from jiaoyibao.jiaoyibao_login import driver
from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver,3).until(lambda x:x.find_element_by_id('com.konsonsmx.iqdii:id/rlBDZH'))#获取绑定账户按钮的id
driver.find_element_by_id('com.konsonsmx.iqdii:id/rlBDZH').click()#点击绑定账户按钮,进入绑定账户页面

然后运行jiaoyibao_element.wait.py

附加代码:
jiaoyibao_login.py

from jiaoyibao.jiaoyibao_capability import driver,NoSuchElementException

def login():
    driver.find_element_by_id('com.konsonsmx.iqdii:id/tvMMDL').click()    #切换密码登录按钮,用密码登录的方式登录交易宝
    driver.find_element_by_id('com.konsonsmx.iqdii:id/et_account').clear()    #清空输入框的用户名

    driver.find_element_by_id('com.konsonsmx.iqdii:id/et_account').send_keys('suwen20')    #得到用户名
    driver.find_element_by_id('com.konsonsmx.iqdii:id/et_password').send_keys('123456keke')   #得到密码
    driver.find_element_by_id('com.konsonsmx.iqdii:id/bt_login').click()  #点击登录按钮

try:
    driver.find_element_by_id('com.konsonsmx.iqdii:id/ib_title_left').click() #点击个人头像
except NoSuchElementException:
    login() #如果没有个人头像这个元素,直接进入到登录界面,调用login()
else:
    driver.find_element_by_id('com.konsonsmx.iqdii:id/ib_title_left').click()#如果有这个元素,就要点击个人头像
    login()

jiaoyibao_capability.py

from appium import webdriver    #导入appium包
from selenium.common.exceptions import NoSuchElementException

desired_caps={}     #定义一个字典,用来存储capablity的相关信息
desired_caps['platformName']='Android'      #设备平台的名称
desired_caps['deviceName']='127.0.0.1:62025'        #设备名称
desired_caps['platforVersion']='5.1.1'      #设备的版本号


desired_caps['app']=r'C:\Users\bella\Desktop\20180922\jiaoyibao.apk'        #获取包路径
desired_caps['appPackage']='com.konsonsmx.iqdii'        #获取包名
desired_caps['appActivity']='com.konsonsmx.market.module.base.ui.FlashADActivity'   #获取activity启动

desired_caps['noReset']='true'  #模拟用户非首次启动
desired_caps['unicodeKeyboard']="true"  #登录用了中文,代码要做配置
desired_caps['resetKeyboard']="true"    #重置键盘也要设置为true

driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)    #启动服务
driver.implicitly_wait(2)   #启动后等待2秒

def check_skipBtn():
    print("check_skipBtn")
    try:
        skipBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/tvCountDown')
    except NoSuchElementException:
        print('no skipBtn')  #当没有这个元素就打印出no cancelBtn
    else:
        skipBtn.click()  #存在这个元素就去点击

def check_loginBtn():
    print("check_loginBtn")
    try:
        loginBtn = driver.find_element_by_id('com.konsonsmx.iqdii:id/ib_title_left')
    except NoSuchElementException:
        print('no loginBtn')  #当没有这个元素就打印出no cancelBtn
    else:
        loginBtn.click()  #存在这个元素就去点击
check_skipBtn()
check_loginBtn()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值