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

9.0 toast定位+WebDriverWait显示等待相关推荐

  1. android 9.0 toast不显示,9.0 toast定位+WebDriverWait显示等待

    Toast  判断-----基本操作问题 首先基本操作,进入安卓市场的账号密码页面--- from appium importwebdriverfrom selenium.webdriver.supp ...

  2. 【转】-【Python】- 【selenium】 -selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())

    -- 学习Python自动化测试的菜鸡,现在是selenium库webdriver的学习时间 [问题] 在获取页面元素的文本的时候,总是获取不到,或者显示为空: [分析] 页面加载不完全: [解决措施 ...

  3. python隐式等待_selenium中隐式等待和显示等待的区别

    Selenium显示等待和隐式等待的区别 1.selenium的显示等待 原理:显示等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那 ...

  4. python显示等待隐式等待

    在Selenium Webdriver中等待的方式简单可以概括为三种: 1.导入time包,调用time.sleep()的方法传入时间,这种方式也叫强制等待,固定死等一个时间 2.隐式等待,直接调用i ...

  5. python wait until_荐selenium显示等待怎么写之WebDriverWait中until的两种实现方式及原理分析...

    关于显示等待WebDriverWait是什么,可以看selenium-wait源码解析 话不多说,先上实现代码: 第一种实现方式(官方提供): from selenium.webdriver.supp ...

  6. Python+Appium自动化测试之toast定位

    目录 一. 前言 二. 环境 三. toast定位准备与定位方法 1. 准备 2. 定位方法 四. 示例代码 一. 前言 在app自动化测试的过程中经常会遇到需要对toast进行定位,最常见的就是定位 ...

  7. Appium+PythonUI自动化之webdriver 的三种等待方式(强制等待、隐式等待、显示等待)

    在自动化测试脚本的运行过程中,webdriver操作浏览器的时候,对于元素的定位是有一定的超时时间,大致应该在1-3秒的样子,如果这个时间内仍然定位不到元素,就会抛出异常,中止脚本执行.我们可以通过在 ...

  8. selenium WebDriverWait类等待机制的实现

    在自动化测试脚本的运行过程中,可以通过设置等待的方式来避免由于网络延迟或浏览器卡顿导致的偶然失败,常用的等待方式有三种: 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语 ...

  9. python显示等待和隐式等待_荐selenium内的隐式等待和显示等待的区别

    selenium的页面等待有显示等待和隐式等待 大多数Web应用程序都是使用Ajax和Javascript开发的.当浏览器加载页面时,我们想要与之交互的元素可能以不同的时间间隔加载. 它不仅难以识别元 ...

最新文章

  1. 网站入口页双栏对称布局实现思路
  2. dfs-Rank the Languages
  3. 形象的解释神经网络激活函数的作用是什么
  4. 13 个应该记住的最不寻常的搜索引擎
  5. Java打war包or打jar包
  6. 预训练模型的前世今生(有福利!)
  7. 个人或结对项目 - 动态显示程序运算的过程
  8. c++读取excel_Java 嵌入 SPL 轻松实现 Excel 文件合并
  9. OpenAL跨平台音效API的安装与移植
  10. Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值
  11. 段错误之 memset 对类对象的误用
  12. matlab程序复制出现乱码,matlab程序复制到Word文档里变成乱码,该如何改?
  13. Python numpy.ones函数方法的使用
  14. 四川麻将胡牌判定(Python、C#、C++)
  15. spaCy文本分类教程
  16. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
  17. Airflow调度 Design
  18. prescan8.5 百度网盘下载链接及安装过程
  19. fastjson 是反射吗_6种超声检测灵敏度,你都知道吗?
  20. 小龙虾,这个“三流入侵者”竟成“钻石网红”?

热门文章

  1. SVF-tools安装笔记
  2. docker中使用SVF生成程序值流图
  3. springcloud全家桶之ribbon
  4. Unity根据变换摧毁物体
  5. 1024程序员的由来
  6. java 自动监测_《阿里巴巴 Java 开发规约》自动化检测插件安装及体验
  7. 面向机器翻译的全文检索系统
  8. 【程序源代码】医院预约挂号小程序
  9. java银行atm存取款系统_各位大佬,如何用JAVA实现银行ATM机的用户登录以及存取款...
  10. 码农的恋爱观:只有程序员能看懂