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类的 ...
随机推荐
- Storm 中drpc调用
package storm.starter; import backtype.storm.Config; import backtype.storm.LocalCluster; import back ...
- MongoDB 和 Mongoose 04
一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...
- autofac 注册
1 注册的概念和方式 使用autofac 的ContainerBuilder 来注册组件(components---通常指实现类),并把它的服务(service---通常指接口,抽象类,类实例)暴露给 ...
- linux多线程编程基本操作(2)
linux c多线程总结: :关于线程和进程 a:使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.我们知道,在Linux系统下,启动一个新的进程必须分配给 ...
- PL/SQL 条件控制语句
1.if-then 语句 语法: IF 条件 THEN 语句序列; END IF; 实例: DECLARE i ) :; BEGIN THEN dbms_output.put_line('True') ...
- c# 说说开发通用通信库,尤其是分布式服务的通信
来,牛皮需要吹起,IT行业需要自娱自乐.开篇吹牛..... 现在我们通信真是各种各样,各种组件,但是就我的看法,功能越完善,封装越完善,牺牲的性能可能就越大,代码量就越大. 当然这不能阻挡IT大军的脚 ...
- JDBC编程:获取数据库连接
JDBC(Java Database Connectivity),即Java数据库连接.通过JDBC编程,可以使Java应用程序和数据库进行交互. JDBC驱动的方式有很多种,我们常用的驱动方式为:本 ...
- linux系统基础之---账号管理(基于centos7.4 1708)
- Java反射的两种使用方法
1.创建User.java package com.tao.test; public class User { private String name; private int id; public ...
- SI - 硬件 - 服务器 - 知识科普
服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为了让大家深入了解服务器的关键知识点,笔者特意抽时间总结了这篇科普文章,旨在帮助读者全面了解服务器.今天内 ...