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']='' #超时时间(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类提供的预期条件判断方法:
注:如果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显示等待的更多相关文章
- WebDriverWait显示等待
等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll_frequency=0.5, ign ...
- Selenium 定位元素原理,基本API,显示等待,隐式等待,重试机制等等
Selenium 如何定位动态元素: 测试的时候会遇到元素每次变动的情况,例如: <div id="btn-attention_2030295">...</di ...
- selenium中的三种等待方式(显示等待WebDriverWait()、隐式等待implicitly()、强制等待sleep())---基于python
我们在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中 ...
- python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions举例
#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium. ...
- 显示等待WebDriverWait
显示等待:WebDriverWait 等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll ...
- 强制等待&隐士等待&显示等待&元素定位方法封装
前言 问题 学习selenium的同学估计大多数都遇见过一个问题 明明页面已经精准的定位到了元素,但是执行脚本的时候却经常报错没找到元素.其实原因很简单,就是脚本执行的速度很快,而浏览器加载页面的时候 ...
- 【转】python selenium2 中的显示等待WebDriverWait与条件判断expected_conditions举例
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...
- selenium相关导入By、Keys、WebDriverWait、ActionChains,显示等待与隐式等待
# -*- coding: utf-8 -*- """ @author: Dell Created on Tue Dec 24 12:33:56 2019 "& ...
- python+Appium自动化:toast定位
Toast简介 Toast是一种简易的消息提示框. 当视图显示给用户,在应用程序中显示为浮动.和Dialog不一样的是,它永远不会获得焦点,无法被点击. 用户将可能是在中间键入别的东西.Toast类的 ...
随机推荐
- java GZIP 压缩数据
package com.cjonline.foundation.cpe.action; import java.io.ByteArrayInputStream; import java.io.Byte ...
- H5面试题整理
1.新的HTML5文档类型和字符集是? 文档类型:<!doctype html> 使用UTF-8编码示例:<meta charset="UTF-8"> 2. ...
- LINUX日志的错误等级
LINUX日志的错误等级 - CSDN博客 https://blog.csdn.net/solmyr_biti/article/details/50634533讯息等级 系统将讯息分为七个主要的等级, ...
- SpringCloud微服务实战:一、Eureka注册中心服务端
1.项目启动类application.java类名上增加@EnableEurekaServer注解,声明是注册中心 1 import org.springframework.boot.SpringAp ...
- string类中字符的大小写转换
今天做一道题,要用string类,涉及大小写转换,查看了C++文档,string类没有提供这样的方法,只好自己写. 之后是想到一个比较笨的方法,我把string当成一个容器,然后用迭代器一个一个来替换 ...
- 【PTA 天梯赛训练】电话聊天狂人(简单map)
输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔. 输出格式: 在一行中给出 ...
- 字符串拼接在Oracle和mysql中的用法
oracle拼接字符串 1.使用 '||' 或者 concat(参数1,参数2) select 'aa' || 'bb' || 'cc' from dual; 结果:aabbcc select co ...
- 如何在linux系统内用openssl 生成 过期的证书
需求:验证过期的证书在系统中不能使用. 问题:如何生成过期的证书呢? 解决方法:1.调整系统时间 2.生成证书 3.验证证书startdate 和 enddate 是否符合你的预期 1.调整系统时间 ...
- web3.js_1.x.x--API(一)event/Constant/deploy/options
/* 事件是使用EVM日志内置功能的方便工具,在DAPP的接口中,它可以反过来调用Javascript的监听事件的回调. 事件在合约中可被继承.当被调用时,会触发参数存储到交易的日志中(一种区块链上的 ...
- 什么是token及怎样生成token
什么是token Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即 ...