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']='' #超时时间(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('') #因为账号输入和密码输入id相同,所以需要用到elements,之前有介绍过
Elements[1].set_text('')
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']='' #超时时间(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('') #因为账号输入和密码输入id相同,所以需要用到elements,之前有介绍过
Elements[1].set_text('')
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('凉了,兄碟')

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

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

  1. WebDriverWait显示等待

    等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll_frequency=0.5, ign ...

  2. Selenium 定位元素原理,基本API,显示等待,隐式等待,重试机制等等

    Selenium  如何定位动态元素: 测试的时候会遇到元素每次变动的情况,例如: <div id="btn-attention_2030295">...</di ...

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

    我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...

  4. python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions举例

    #coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium. ...

  5. 显示等待WebDriverWait

    显示等待:WebDriverWait 等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll ...

  6. 强制等待&隐士等待&显示等待&元素定位方法封装

    前言 问题 学习selenium的同学估计大多数都遇见过一个问题 明明页面已经精准的定位到了元素,但是执行脚本的时候却经常报错没找到元素.其实原因很简单,就是脚本执行的速度很快,而浏览器加载页面的时候 ...

  7. 【转】python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions举例

    #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...

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

    # -*- coding: utf-8 -*- """ @author: Dell Created on Tue Dec 24 12:33:56 2019 "& ...

  9. python+Appium自动化:toast定位

    Toast简介 Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击. 用户将可能是在中间键入别的东西.Toast类的 ...

随机推荐

  1. sublime3插件安装方法

    sublime3插件安装方法:http://blog.csdn.net/u011627980/article/details/52171886

  2. (转)理解YOLOv2训练过程中输出参数含义

    最近有人问起在YOLOv2训练过程中输出在终端的不同的参数分别代表什么含义,如何去理解这些参数?本篇文章中我将尝试着去回答这个有趣的问题. 刚好现在我正在训练一个YOLOv2模型,拿这个真实的例子来讨 ...

  3. PAT (Basic Level) Practise (中文)-1040. 有几个PAT(25)

    1040. 有几个PAT(25)     http://www.patest.cn/contests/pat-b-practise/1040 字符串APPAPT中包含了两个单词“PAT”,其中第一个P ...

  4. Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

    Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...

  5. Restframework介绍

    1.REST介绍 REST与技术无关,它代表的是一种软件架构风格,全称Representational State Transfer,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它 ...

  6. Ajax跨域(jsonp) 调用JAVA后台

    1. JSONP定义    JSONP是英文JSON with Padding的缩写,是一个非官方的协议.它允许在服务器端生成script tags返回至客户端,通过javascript callba ...

  7. window.location.href url含中文乱码问题

    (1).页面中先对中文进行编码. 如:window.location.href = url+"&groupName=" + encodeURI(encodeURI(grou ...

  8. PTA 最多删除3个字符(DP) - 30分

    给定一个全部由小写英文字母组成的字符串,允许你至多删掉其中 3 个字符,结果可能有多少种不同的字符串? 输入格式: 输入在一行中给出全部由小写英文字母组成的.长度在区间 [4, 1] 内的字符串. 输 ...

  9. jzoj100029. 【NOIP2017提高A组模拟7.8】陪审团(贪心,排序)

    Description 陪审团制度历来是司法研究中的一个热议话题,由于陪审团的成员组成会对案件最终的结果产生巨大的影响,诉讼双方往往围绕陪审团由哪些人组成这一议题激烈争夺. 小 W 提出了一个甲乙双方 ...

  10. C++继承和派生练习(一)--关于从people(人员)类派生出student(学生)类等

    . 从people(人员)类派生出student(学生)类 添加属性:班号char classNO[]:从people类派生出teacher(教师)类, 添加属性:职务char principalsh ...