当前位置: 首页 > wzjs >正文

时尚网站策划专业做网站

时尚网站策划,专业做网站,wordpress增加访问速度,定做网站建设元素等待作用 1.设置元素等待可以更加灵活的制定等待定位元素的时间,从而增强脚本的健壮性,提高执行效率。 2.元素等待是为了解决如下场景的问题:脚本执行时,脚本的执行速度和页面元素的加载速度未必一致,也就是说&a…

元素等待作用

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

2.元素等待是为了解决如下场景的问题:脚本执行时,脚本的执行速度和页面元素的加载速度未必一致,也就是说,可能出现脚本已经运行到某个元素,但该元素尚未加载到页面,此时脚本会因无法定位到该元素而导致执行失败。元素等待本质是为了解决时序上不匹配的问题。

元素等待类型

类型特点举例
强制等待

设置固定的等待时间

from time import sleep
#强制等待5秒
sleep(5)

隐式等待

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

driver.implicitly_wait(5)

显示等待

针对某个元素来设置的等待时间

from selenium.webdriver.support.ui import WebDriverWait

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

强制等待

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

sleep(): 设置固定休眠时间。 python 的 time 包提供了休眠方法 sleep() , 导入 time包后就可以使用 sleep()进行脚本的执行过程进行休眠。

1 from time import sleep
2 
3 #强制等待5秒
4 
5 sleep(5)

隐式等待

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

 1 #implicitly_wait():是 webdirver 提供的一个超时等待。隐的等待一个元素被发现,或一个命令完成。如果超出了设置时间的则抛出异常。2 #implicitly_wait():隐式等待3 #当使用了隐士等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常4 #换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是05 #一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,6 #它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。7 8 #implicitly_wait()方法比 sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。9 
10 driver.implicitly_wait(20)

显式等待

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

WebDriverWait():同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时间检测一次当前。页面元素是否存在,如果超过设置时间检测不到则抛出异常。

方法WebDriverWait格式参数如下:

1 '''详细格式如下:2 WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)3 driver - WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程)4 timeout - 最长超时时间,默认以秒为单位5 poll_frequency - 休眠时间的间隔(步长)时间,默认为 0.5 秒6 ignored_exceptions - 超时后的异常信息,默认情况下抛 NoSuchElementException 异常。7 WebDriverWai()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的说明。8 until(method, message=’’)9 调用该方法提供的驱动程序作为一个参数,直到返回值不为 False。
10 until_not(method, message=’’)
11 调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
12 lambda
13 lambda 提供了一个运行时动态创建函数的方法。'''
14 
15 from selenium.webdriver.support.ui import WebDriverWait
16 
17 WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("elementID"))

其中,三种等待方法的作用和区别,如下:

强制等待,也就是常说的死等待,使用time模块提供的sleep方法,脚本在等待sleep(x) x秒后才执行,此时脚本也许出现了无效等待,即元素已经出现,可以继续操作,但因指定的时间未到,脚本无法执行,因而,在实际Web UI开发中应杜绝sleep等待;

显式等待,WebDriver提供的针对元素级别的、灵活、智能的等待方法,通过配合until()、until_not()、ExpectedCondition等条件的使用,默认每500ms检查一次条件状态,可以及时将脚本从等待中唤醒,避免无效等待,在实际应用中推荐使用该方法。

该等待的调用方法如下:

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

隐式等待,WebDriver提供的针对driver级别的适用整个生命周期的等待方法,该等待是全局设置,因而只需在实例化driver后设置一次即可。从等待作用上看,是可以满足需要的,但是考虑到实际应用场景,driver要等待的元素和脚本要操作的元素未必相同,也就是说,脚本要操作的元素已经出现,但因为设置了全局等待,driver也会继续等待页面上其他无关元素,直至整个页面加载完毕。因而,与显式等待相比,可能出现无效等待的情况。

等待方法实战举例

1.强制等待方法应用实例

11 from appium import webdriver
12 import time
13 desired_caps = {}
14 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
15 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
16 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
17 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
18 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
19 desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
20 desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
21 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
22 # 休眠五秒等待页面加载完成
23 time.sleep(5)   #强制等待5s,不管等待的元素是否出现,都要等5s
24 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
25 time.sleep(3)  #演示效果
26 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click()
27 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"程序员的世界你不懂")
28 driver.quit()

2.显示等待方法应用实例

11 from appium import webdriver
12 from selenium.webdriver.support.ui import WebDriverWait
13 import time
14 desired_caps = {}
15 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
16 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
17 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
18 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
19 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
20 desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
21 desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
22 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
23 try:
24     # 显示等待(等待特定元素出现)
25     WebDriverWait(driver, 3).until(lambda x: x.find_element_by_id('com.taobao.taobao:id/home_searchedit'))
26     driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
27     time.sleep(3)  # 演示效果
28     driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click()
29     driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"程序员的世界你不懂")
30 finally:
31     driver.quit()

3.隐式等待方法应用实例

11 from appium import webdriver
12 from selenium.webdriver.support.ui import WebDriverWait
13 import time
14 desired_caps = {}
15 desired_caps['platformName'] = 'Android'   #android的apk还是IOS的ipa
16 desired_caps['platformVersion'] = '8.0'  #android系统的版本号
17 desired_caps['deviceName'] = '127.0.0.1:62001'    #手机设备名称,通过adb devices  查看
18 desired_caps['appPackage'] = 'com.taobao.taobao'  #apk的包名
19 desired_caps['appActivity'] = 'com.taobao.tao.welcome.Welcome'  #apk的launcherActivity
20 desired_caps['unicodeKeyboard'] = True   #使用unicodeKeyboard的编码方式来发送字符串
21 desired_caps['resetKeyboard'] = True   #将键盘给隐藏起来
22 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) #启动服务器地址,后面跟的是手机信息
23 
24 # 隐式等待(等待所有元素)
25 driver.implicitly_wait(3)  #隐式等待,最长3s
26 driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
27 time.sleep(3)  #演示效果
28 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").click()
29 driver.find_element_by_id("com.taobao.taobao:id/searchEdit").send_keys(u"程序的世界你不懂")
30 driver.quit()

梳理

1.本节主要介绍appium自动化中三种元素等待方法,并讲解了各自的优缺点,实际开发中推荐使用显示等待,最后,为了便于理解和应用,针对每种等待方法,编写了对应的脚本。

2.强制等待的方法,在debug时候很有用,不过建议慎用这种方法,因为太死板,严重影响程序执行速度!

3.以上三种等待方法,在具体的场景中需要根据情况选择合适的方法,灵活运用。。。

4.做过自动化的小伙伴们或者童鞋们,在启动app的时候,幸运的小伙伴和同学们都会中这个大奖:如果直接做下一步点击操作,经常会报错,于是我们便会自然而然的想到上边介绍的三种方法,会在启动完成的时候加sleep等方法。那么问题来了,你这个sleep时间到底设置多少合适呢?你不知道我也不知道这个问题的答案,如果设置长了,就浪费时间,设置短了,就会找不到元素报错了。过长过短都是个让你头疼的事,那么有没有别的方法可以克服这个问题了。当然有,但是这个只是针对安卓手机的,要记住了,iPhone不适合的。这个时候我们可以用wait_activity的语法,等到你想点击的页面activity出现了,再点击,可以有效的节省时间。

wait_activity

(1)查看源码

1 def wait_activity(self, activity, timeout, interval=1):2     """Wait for an activity: block until target activity presents3     or time out.4     5     This is an Android-only method.6 7     :Agrs:8      - activity - target activity9      - timeout - max wait time, in seconds
10      - interval - sleep interval between retries, in seconds
11     """
12     try:
13         WebDriverWait(self, timeout, interval).until(
14             lambda d: d.current_activity == activity)
15         return True
16     except TimeoutException:
17         return False

(2)解释说明:

1 wait_activity(self, activity, timeout, interval=1):2 3     等待指定的activity出现直到超时,interval为扫描间隔1秒4 5     即每隔几秒获取一次当前的activity6     7     android特有的8 9     返回的True 或 False
10 
11     :Agrs:
12 
13      - activity - 需等待的目标 activity
14 
15      - timeout - 最大超时时间,单位是s
16 
17      - interval - 循环查询时间
18 
19     用法:driver.wait_activity(‘.activity.xxx’,5,2)

获取current_activity

(1)打开app后,先sleep10秒,等app完全启动完成进入主页面,然后获取当前界面的activity

11 from appium import webdriver
12 from time import sleep
13 desired_caps = {
14                 'platformName': 'Android',
15                 'deviceName': '127.0.0.1:62001',
16                 'platformVersion': '4.4.2',
17                 'appPackage': 'com.baidu.yuedu',
18                 'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
19                 }
20 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
21 
22 sleep(10)
23 # 获取当前界面activity
24 ac = driver.current_activity
25 print(ac)

(2)运行结果:

 

等待activity

(1)用sleep太浪费时间了,并且不知道什么时候能启动完成,所以尽量不用sleep,也不推荐使用。因为这个确实是太low了。

(2)上一步已经获取当主页面的activity了,那就可以用wait_activity等它出现了,再做下一步的点击操作

 

(3)参考代码

11 from appium import webdriver
12 from time import sleep
13 desired_caps = {
14                 'platformName': 'Android',
15                 'deviceName': '127.0.0.1:62001',
16                 'platformVersion': '4.4.2',
17                 'appPackage': 'com.baidu.yuedu',
18                 'appActivity': 'com.baidu.yuedu.splash.SplashActivity'
19                 }
20 driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
21 
22 # sleep(10)  # 不用sleep
23 
24 # 获取当前界面activity
25 ac = driver.current_activity
26 print(ac)
27 
28 # 等主页面activity出现,30秒内
29 driver.wait_activity(".base.ui.MainActivity", 30)
30 
31 # 点知道了
32 driver.find_element_by_id("com.baidu.yuedu:id/positive").click()

 

http://www.dtcms.com/wzjs/127202.html

相关文章:

  • 网站注册好域名怎么办成都网络营销品牌代理机构
  • 徐州金网网站建设最彻底的手机优化软件
  • 怎么在建设银行网站更新身份证做个电商平台要多少钱
  • 泽成seo网站排名百度快速优化推广
  • 动漫制作专业能选择什么职业南宁seo公司哪家好
  • 做网站公司的使命我赢网客服系统
  • 如何自己免费建网站seo常用分析的专业工具
  • 做外贸网站价位发布平台
  • 跨境电商网站制作太原推广团队
  • 做网站需不需要云数据库搜索推广开户
  • 北京网站建设及优化外贸独立站怎么建站
  • 有做微信婚介网站的吗产品宣传方式有哪些
  • 南京建网站公司视频专用客户端app
  • 朔州如何做百度的网站外链群发平台
  • 网站开发新功能产品推广方案范文
  • 中国十大网络营销公司以下哪个单词表示搜索引擎优化
  • 用网站做淘客怎么做百姓网
  • 韩国购物网站推广管理
  • 科学城做网站公司品牌营销策划书
  • 成品网站建设哪家好pc网站优化排名
  • 官方网站建设的方法有哪些方面产品推广方法
  • php语言做购物网站免费自学电商教程
  • 网站建设项目经费的报告网络推广是做什么工作的
  • 上海网站制作工作室北京优化网站推广
  • golang做网站怎么样阿里云建网站
  • 网店详情页面设计优化网站排名公司
  • 公司网站建设的不足推广链接点击器
  • 网站正在建设中的图片大全软文范例大全100
  • 政府网站开发报告网站seo优化方案
  • 国外做机器的好的网站代发百度帖子包收录排名