前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium系列(三十七)在测试用例增加等待

Appium系列(三十七)在测试用例增加等待

作者头像
雷子
发布2021-07-06 16:55:15
4510
发布2021-07-06 16:55:15
举报
文章被收录于专栏:雷子说测试开发

在测试用例执行的时候,我们可能出现元素时而能点击,时而无法点击,这可能就是因为没有加载出来,我们就执行了。那么我们应该怎么做呢,

那么我们应该如何处理呢,我们可以在代码中增加等待,

那么我们来看下在appium中我们有哪些等待呢

1.强制等待

2.硬性等待

3显性等待

我们看下在python中是如何实现的呢。

1.强制等待

在我们的演示的代码中,已经都实现了。

代码语言:javascript
复制
from time import sleep
#导入time中的sleep,在代码中使用。
sleep(10)

2.隐性等待

代码语言:javascript
复制
driver.implicitly_wait(10)。等待10s中

示在规定的时间内页面的所有元素都加载完了就执行下一步,否则一直等到时间截止,然后再继续下一步。这个方法的缺点是你需要的元素已经加载出来了,但页面还没有加载完,再需要继续等待页面加载完才能执行下一步操作。

3.显性等待

代码语言:javascript
复制
from  selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import  By
代码语言:javascript
复制
#方法1
wait = WebDriverWait(driver, 10, 0.5)
wait.until(EC.presence_of_element_located((By.ID, 'KW')))
#用法例2:
loc = ("xpath", "//*[@text='允许']")
e = WebDriverWait(driver, 1, 0.5).until(EC.presence_of_element_located(loc))
e.click()

那么我们可以在我们的现有的代码中演示

代码语言:javascript
复制
from time import  sleep
from ddt import ddt,file_data
from appium import  webdriver
from common.pyyaml import  getyaml
from common.parame import Parmer
from config import apk_path,login_element
from  common.pertools import caijicpu,getnencun
from  selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import  By
element=getyaml(login_element)
from  common.isintsallapp import isinstallapp
@ddt
class testCase(Parmer):
    def setUp(self) -> None:
        is_first_install=isinstallapp(devicesName=self.parme['deviceName'],apk_path=apk_path,
                                      apppackage=self.parme['appPackage'])
        desired_caps=self.parme['desired_caps']
        self.driver = webdriver.Remote('http://0.0.0.0:%s/wd/hub'%str(self.parme['port']), desired_caps)
        self.driver.implicitly_wait(10)
        # 启动同意用户协议
        agree=element['agreeelement']
        self.driver.find_element_by_id(agree).click()
        if is_first_install:
            # 首次安装需要加载文件
            sleep(50)
        sleep(50)
        self.driver.find_element_by_id(element['opearelement']).click()
        sleep(10)
        WebDriverWait(self.driver, 10, 0.5).until(
            EC.presence_of_element_located((By.ID,element['logintextclik']))).click()
    def tearDown(self) -> None:
        self.driver.quit()
        sleep(20)
    @file_data("../data/casedata/logincase.yaml")
    def testlogin(self,user,user_password,msg,casename):
        cpu=caijicpu(packagename=self.parme['appPackage'],devices=self.parme['deviceName'])
        memory=getnencun(packagename=self.parme['appPackage'],devices=self.parme['deviceName'])
        print("用例:%s 执行前:cpu:%s 内存:%s"%(casename,cpu,memory))
        sleep(10)
        loc = ("id", element['usernameedit'])
        username = WebDriverWait(self.driver, 10, 0.5).until(EC.presence_of_element_located(loc))
        username.clear()
        username.send_keys(user)
        password=WebDriverWait(self.driver,10,0.5).until(EC.presence_of_element_located((By.ID,element['usernameedit'])))
        # password = self.driver.find_element_by_id(element['passwordedit'])
        password.clear()
        password.send_keys(user_password)
        sleep(2)
        login = self.driver.find_element_by_id(element['loginbtn'])
        login.click()
        sleep(10)
        try:
            self.driver.find_element_by_id(element['assertelement'])
            self.assertTrue(False,msg=msg)
            cpuend = caijicpu(packagename=self.parme['appPackage'], devices=self.parme['deviceName'])
            memoryend = getnencun(packagename=self.parme['appPackage'], devices=self.parme['deviceName'])
            changecpu = float(cpuend) - float(cpu)
            memorychange = float(memoryend) - float(memory)
            print("用例:%s 执行过程变化:cpu:%s M 内存:%s M" % (casename, changecpu, memorychange))

        except:
            self.assertTrue(True,msg=msg)
            cpuend = caijicpu(packagename=self.parme['appPackage'], devices=self.parme['deviceName'])
            memoryend = getnencun(packagename=self.parme['appPackage'], devices=self.parme['deviceName'])
            changecpu=float(cpuend)-float(cpu)
            memorychange=float(memoryend)-float(memory)
            print("用例:%s 执行过程变化:cpu:%s M 内存:%s M" % (casename, changecpu, memorychange))

修改后的代码已经提交到远程仓库。

代码语言:javascript
复制
最新代码已经提交
https://gitee.com/liwanlei/appiumdemo

后记

发现问题,解决问题。遇到问题,慢慢解决问题即可。

欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档