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

2021-07-06 16:55:15 浏览数 (1)

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

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

那么我们来看下在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

后记

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

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

0 人点赞