9.0 toast定位+WebDriverWait显示等待

Toast  判断-----基本操作问题

首先基本操作,进入安卓市场的账号密码页面---

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction #导入Touch Action类
import time,re,os
Start={}
Start[‘platformName‘]=‘android‘    #设备型号  android或者ios
Start[‘platformVersion‘]=‘5.1‘  #安卓设备版本号
Start[‘deviceName‘]=‘192.168.176.101:5555‘     #安卓设备名称
Start[‘app‘]=r‘C:\Users\Administrator\Desktop\xuexi\apk\anzhuoshichang_16793302.apk‘    #设备路径  pc电脑存放apk包的路径
#上面的路径不推荐这种写法,但是目前先这么写!后续告诉大家正确的写法
Start[‘appPackage‘]=‘com.hiapk.marketpho‘      #包名
Start[‘appActivity‘]=‘com.baidu.appsearch.LauncherActivity‘        #容器
Start[‘noReset‘]=‘True‘           #是否重新安装app  True不重新安装
Start[‘unicodeKeyboard‘]=‘True‘   #是否禁用手机键盘  True禁用手机输入法
Start[‘resetKeyboard‘]=‘True‘     #是否启动appium自带键盘 True开始手机输入法
Start[‘automationName‘]=‘uiautomator2‘     #可选模式  本教程默认 Uiautomator2
Start[‘newCommandTimeout‘]=‘400‘  #超时时间(s)
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘,Start)
driver.implicitly_wait(10)  #隐式等待十秒
time.sleep(3)
‘‘‘模拟器或者手机上已经有了安卓市场,那么启动之后,直接点击左上角的头像图标‘‘‘
head=‘com.hiapk.marketpho:id/person_center_btn‘
driver.find_element_by_id(head).click()  #点击头像图标进入个人中心
time.sleep(5)
login=‘com.hiapk.marketpho:id/please_login‘
driver.find_element_by_id(login).click() #点击立即登录
time.sleep(5)

为什么要进入到这个页面呢---因为这个页面输入有个toast提示............

如图所示:这个toast提示是在uiautomator上面定位不到的,所以需要稍微处理一下!

然后随便输入一个手机号码和一个密码登记登录:

Elements=driver.find_elements_by_id(‘com.hiapk.marketpho:id/edt_text‘)
Elements[0].set_text(‘17700000000‘)  #因为账号输入和密码输入id相同,所以需要用到elements,之前有介绍过
Elements[1].set_text(‘123456‘)
driver.find_element_by_id(‘com.hiapk.marketpho:id/btn_login‘).click()

这时手机出现下图所示的toast提示:

之前章节有说过权限弹窗定位的那个方法--用在这里就O了!记得导入这个库

from selenium.webdriver.support import expected_conditions as EC  #实际上是调用的这个类expected_conditions  ------as EC重命名

使用方法: WebDriverWait(driver,30, 0.5).until(EC.presence_of_element_located(Element))

 

expected_conditions类提供的预期条件判断方法:

title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值

title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值

presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该素一定可见

visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0

visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了

presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。

text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串

text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串

frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False

invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见

element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable

staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False

element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表

element_selection_state_to_be : 判断某个元素的选中状态是否符合预期

element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator

alert_is_present : 判断页面上是否存在alert

注:如果toast用presence_of_element_locatedpan判断不到,可以考虑用alert_is_present

try:
    Element = ("xpath", "//*[@text=‘网络连接异常,请重试‘]")
    WebDriverWait(driver,30, 0.5).until(EC.presence_of_element_located(Element))
    print(‘获取到toast提示:网络连接异常,请重试‘)
except:
    print(‘凉了,兄碟‘)

稍微换一下写法呢:

结果:很舒服---也是可以的--

 try:
    Element = "//*[@text=‘网络连接异常,请重试‘]"
    WebDriverWait(driver,60, 0.5).until(lambda driver:driver.find_element_by_xpath(Element))
    print(‘获取到toast提示:网络连接异常,请重试‘)
except:
    print(‘凉了,兄碟‘)

备注:toast定位基本上是稳定的,但是偶尔会判断不鸟,属于正常现象,建议把扫描时间0.5s换成0.1s会稳定很多!

WebDriverWait(driver,60, 0.5).until(lambda driver:driver.find_element_by_xpath(Element))

这个是显示等待, 意思就是 等待60s   在这六十秒中,每隔0.5秒扫描一次,是否出现元素 Element

现在把上面的强制等待time.sleep()全部换成显示等待!

from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from appium.webdriver.common.touch_action import TouchAction #导入Touch Action类
import time,re,os
Start={}
Start[‘platformName‘]=‘android‘    #设备型号  android或者ios
Start[‘platformVersion‘]=‘5.1‘  #安卓设备版本号
Start[‘deviceName‘]=‘192.168.176.101:5555‘     #安卓设备名称
Start[‘app‘]=r‘C:\Users\Administrator\Desktop\xuexi\apk\anzhuoshichang_16793302.apk‘    #设备路径  pc电脑存放apk包的路径
#上面的路径不推荐这种写法,但是目前先这么写!后续告诉大家正确的写法
Start[‘appPackage‘]=‘com.hiapk.marketpho‘      #包名
Start[‘appActivity‘]=‘com.baidu.appsearch.LauncherActivity‘        #容器
Start[‘noReset‘]=‘True‘           #是否重新安装app  True不重新安装
Start[‘unicodeKeyboard‘]=‘True‘   #是否禁用手机键盘  True禁用手机输入法
Start[‘resetKeyboard‘]=‘True‘     #是否启动appium自带键盘 True开始手机输入法
Start[‘automationName‘]=‘uiautomator2‘     #可选模式  本教程默认 Uiautomator2
Start[‘newCommandTimeout‘]=‘400‘  #超时时间(s)
driver = webdriver.Remote(‘http://127.0.0.1:4723/wd/hub‘,Start)
driver.implicitly_wait(10)  #隐式等待十秒
time.sleep(3)
‘‘‘模拟器或者手机上已经有了安卓市场,那么启动之后,直接点击左上角的头像图标‘‘‘
head=‘com.hiapk.marketpho:id/person_center_btn‘
driver.find_element_by_id(head).click()  #点击头像图标进入个人中心

# time.sleep(5)
login=‘com.hiapk.marketpho:id/please_login‘
#判断十秒内是否获取到登录元素
WebDriverWait(driver,10,0.5).until(lambda driver:driver.find_element_by_id(login))
driver.find_element_by_id(login).click() #点击立即登录
# time.sleep(5)
Elements=driver.find_elements_by_id(‘com.hiapk.marketpho:id/edt_text‘)
#点击立即登录之后,获取下一页页面的元素
WebDriverWait(driver,10,0.5).until(lambda driver:driver.find_element_by_xpath(‘//*[@text="手机/邮箱/通行证"]‘))
Elements[0].set_text(‘17700000000‘)  #因为账号输入和密码输入id相同,所以需要用到elements,之前有介绍过
Elements[1].set_text(‘123456‘)
driver.find_element_by_id(‘com.hiapk.marketpho:id/btn_login‘).click()
#因为这个toast提示时间出来的有点晚,所以等待时间稍微加那么一丢丢
# try:
#     Element = ("xpath", "//*[@text=‘网络连接异常,请重试‘]")
#     WebDriverWait(driver,60, 0.5).until(EC.presence_of_element_located(Element))
#     print(‘获取到toast提示:网络连接异常,请重试‘)
# except:
#     print(‘凉了,兄碟‘)
try:
    Element = "//*[@text=‘网络连接异常,请重试‘]"
    WebDriverWait(driver,60, 0.5).until(lambda driver:driver.find_element_by_xpath(Element))
    print(‘获取到toast提示:网络连接异常,请重试‘)
except:
    print(‘凉了,兄碟‘)

基本上原理都是大同小异....理解了之后,可以写的花里胡哨的!!!!!

原文地址:https://www.cnblogs.com/pythontest/p/9520941.html

时间: 2024-10-02 18:18:13

9.0 toast定位+WebDriverWait显示等待的相关文章

WebDriverWait显示等待源码剖析

我们在使用selenium 查找元素的时候,为了避免网页加载慢,会加一个sleep(x秒) 这样能解决加载慢的问题,但也存在2个问题 1.如果你设置的等待时间过了,还没加载出来,就会报“NoSuchElementException” 2.如果设置等待5秒,2秒就加载出来了,也还是会再等3秒,这样影响执行效率 有什么好的方法呢? 当然是有的,selenium.webdriver.support.wait下有一个 WebDriverWait类,就能很好的解决上面的问题 具体用法如下 from sel

selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别 在前面的博文中简单介绍了<强制等待和隐士等待的区别和理解>,本文再详细的结合案例进行理解. sleep(): 强

python selenium 中的显示等待WebDriverWait与条件判断expected_conditions

#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait base_url = "http://www.baidu.com"

显示等待WebDriverWait

显示等待:WebDriverWait 等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None) --driver:WebDriver 的驱动程序(Ie, Firefox, Chrome 或远程) --timeout:最长超时时间,默认以秒为单位 --poll_frequency:休眠时间的间隔(步长)时间,默认为

selenium相关导入By、Keys、WebDriverWait、ActionChains,显示等待与隐式等待

# -*- coding: utf-8 -*- """ @author: Dell Created on Tue Dec 24 12:33:56 2019 """ import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait#等待一个元素加载完成 from selenium.webdriver.support i

selenium中的显示等待,隐示等待,强制等待

我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为显示等待WebDriverWait().隐式等待implicitly_wait().强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别: 1.显式等待  WebDriverWait()      显式等待是你定义的一段代码,用于等待某个条件发生然后再

selenium 的隐式等待和显示等待

等待 现在的网页越来越多采用了 Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了.如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出NullPointer的异常. 为了避免这种元素定位困难而且会提高产生 ElementNotVisibleException 的概率.所以 Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待. 隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行. 1.

Arcgis andoid开发之应用百度地图接口实现精准定位与显示

怀着激动.兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观.学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看看这到底是个什么东西? 首先,简单地介绍一下功能:1.离线地图的加载:2.GPS的定位与显示.文字比较模糊,看看实际的效果图: 功能其实很简单,下面解释一下实现思路: 1.布局 <?xml version="1.0" encoding="utf-8"?> &

自定义Toast排队重复显示问题:

原文 http://blog.csdn.net/baiyuliang2013/article/details/38655495Toast是安卓系统中,用户误操作时或某功能执行完毕时,对用户的一种提示,它没有焦点,并在一定时间内会消失,但用户连续误操作(如登录时,密码错误)多次时,则会有多个Toast被创建,系统会把这些toast放进队列中,等待上个Toast 显示完毕,接着显示下一个,那么用户则会看到多次Toast提示,无论你退出软件与否,这样给用户的体验则大打折扣,所以我们需要做的是,若Toa