可能又有人会提出疑问说:为什么你这了又driver,我没有啊,或者说我按照你强制等待那样将启动的封装了,然后隐式等待我也这样封装了,然后我这个就报错了,为什么?首先思考一下,你回去把我们生成driver的地方去掉封装,然后运行这样的一句话就不是就不会报错,尝试一下。但是封装就报错,为什么?因为我们这里没有把driver返回出去,也就是说我们需要用到的driver现在是没有被定义的,那么肯定会报错,那我如何和前面的代码一样封装呢?看下面:
第二电脑网对《Appium python自动化测试系列之等待函数如何进行实战(九)》总结来说,为我们python基础很实用。#conding="utf-8"
import time
from appium import webdriver
import os
def Case(platformName,platformVersion,deviceName,app,appPackage,appActivity):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
#print getConfig("baseconf", "platformName")
desired_caps = {}
desired_caps['platformName'] = platformName #设置平台
desired_caps['platformVersion'] = platformVersion #系统版本
desired_caps['deviceName'] = deviceName #设备id
desired_caps['autoLaunch'] = 'true' #是否自动启动
desired_caps['noReset'] = 'true'
desired_caps['newCommandTimeout'] = 20
desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage #包名
desired_caps['appActivity'] = appActivity #启动的activity
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
waitFor(5)
return driver
#等待函数
def waitFor(t):
time.sleep(t)
#隐式等待
def implicit_for_wait(t):
driver = Case(platformName,platformVersion,deviceName,app,appPackage,appActivity)
driver.implicitly_wait(t)
再回过头去看代码是不是发现了不一样的地方?这里我们将初始化的driver进行了一个闭包,也就是给出了一个返回值,然后我们在隐式等待中将我们的driver进行调用,然后他就拥有了driver,所以这个时候就能够像上面的代码一样进行调用该等待方法了。
9.4 显式等待
前面我们讲了隐式等待和强制等待,下面我们看看显示等待,同样的先看代码:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
首先我们来弄明白这个方法里面几个参数的含义:
1、driver:是我们操作的driver。
2、timeout:超时时间,也就是我们找这个元素要找多久
3、poll_frequency:间隔时间,怎么理解?就是说在超时时间内每多少秒去查询一次,默认情况是0.5秒一次
4、ignored_exceptions:异常,就是没有找到程序抛出什么异常。在默认情况是跑出:NoSuchElementException
在一般情况下我们只需要填写前面两个就行。看到这里是否发现一个问题,这个也没有定位元素,只是driver和时间。是不是也是全局的呢?答案肯定是否定的。在一般的情况下显式等待是需要和其他方法一起结合的,看下面完整的代码:
driver = self.driver
WebDriverWait(driver, 10,5).until(lambda driver:driver.find_element_by_id("ssss"))
这个代码是不是又看不懂了?我们再接着按照刚才的方法把这个代码重构一下:
#conding="utf-8"
import time
from appium import webdriver
import os
def Case(platformName,platformVersion,deviceName,app,appPackage,appActivity):
PATH = lambda p: os.path.abspath(os.path.join(os.path.dirname(__file__), p))
#print getConfig("baseconf", "platformName")
desired_caps = {}
desired_caps['platformName'] = platformName #设置平台
desired_caps['platformVersion'] = platformVersion #系统版本
desired_caps['deviceName'] = deviceName #设备id
desired_caps['autoLaunch'] = 'true' #是否自动启动
desired_caps['noReset'] = 'true'
desired_caps['newCommandTimeout'] = 20
desired_caps['app'] = PATH(app)#安装包路径,放在该py文件的目录下)
desired_caps['appPackage'] = appPackage #包名
desired_caps['appActivity'] = appActivity #启动的activity
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
waitFor(5)
return driver
#等待函数
def waitFor(t):
time.sleep(t)
#隐式等待
def implicit_for_wait(t):
driver = Case(platformName,platformVersion,deviceName,app,appPackage,appActivity)
driver.implicitly_wait(t)
#显示等待
def wait(t):
driver = Case(platformName,platformVersion,deviceName,app,appPackage,appActivity)
WebDriverWait(driver, 10,5).until(lambda driver:driver.find_element_by_id("ssss"))
这里python基础不好的读者会有一定困难,前面的不讲解。先看lambda后面的代码,他是一个匿名函数,冒号前面的是参数,冒号后面的是返回值,driver是我们需要传入的一个参数,类似下面的代码:
更多:Appium python自动化测试系列之等待函数如何进行实战(九)
https://www.002pc.comhttps://www.002pc.com/python/3552.html
你可能感兴趣的Appium,python,实战,自动化,测试,函数
No alive nodes found in your cluster
0踩
赏
0 赞