appium 3-4-1034等待、日志、性能数据、xpath定位、web driver协议
1.等待
1.1精确等待
sleep 不推荐
@Test
public void testWait1() throws InterruptedException{
day_time();
Thread.sleep(10000);
day_time();
WebElement e1 = driver.findElementById("com.xueqiu.android:id/user_profile_icon");
System.out.println(e1.getTagName()+"\t"+e1.getLocation());
e1.click();
}

## 1.2全局隐式等待
一段时间内,会不断的查看当前页面是否有某个控件。存在就返回;否则就一直寻找,直到超时。默认值是0,即不等待
```#java
driver.manager().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
```
```#java
@Test
public void testWait2(){
driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
day_time();
driver.findElementById("com.xueqiu.android:id/user_profile_icon").click();
day_time();
}
```

问题:隐式等待设置无效,没有继续寻找
1.3显式等待,针对单个元素
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement element = wait.until(ExpectedConditions.elementToBe(By.id("someid"));</font>
@Test
public void testWait3(){
WebDriverWait wait = new WebDriverWait(driver,10);
day_time();
WebElement e3 = wait.until(ExpectedConditions.presenceOfElementLocated( By.id("com.xueqiu.android:id/user_profile_icon")));
day_time();
System.out.println(e3.getTagName()+"\t"+e3.getLocation());
e3.click();
}

# 2.log
```#java
driver.manage().logs().getAvailableLogTypes();
driver.manage().logs().get("logcat").getAll().toString()
```
```#java
public void testLog()throws InterruptedException {
Thread.sleep(8000);
driver.rotate(ScreenOrientation.LANDSCAPE);
System.out.println(driver.manage().logs().getAvailableLogTypes());
}
```

public void testLog()throws InterruptedException {
Thread.sleep(8000);
driver.rotate(ScreenOrientation.LANDSCAPE);
System.out.println(driver.manage().logs().get("logcat").getAll().toString());
}

```#java
public void testLog()throws InterruptedException {
Thread.sleep(8000);
driver.rotate(ScreenOrientation.LANDSCAPE);
for(Object l:driver.manage().logs().get("logcat").getAll().toArray()){
System.out.println(l);
}
}
```

# 3.手机性能数据
python目前不支持
```#java
public void testPerformace() throws Exception{
System.out.println(driver.getPerformanceData("com.xueqiu.android", "cpuinfo", 10));
WebDriverWait wait = new WebDriverWait(driver,10);
WebElement e3 = wait.until(ExpectedConditions.presenceOfElementLocated(By.id("com.xueqiu.android:id/user_profile_icon")));
System.out.println(driver.getSupportedPerformanceDataTypes());
System.out.println(driver.getPerformanceData("com.xueqiu.android", "memoryinfo", 10));
System.out.println(driver.getPerformanceData("com.xueqiu.android", "batteryinfo", 10));
System.out.println(driver.getPerformanceData("com.xueqiu.android", "networkinfo", 10));
Thread.sleep(3000);
}
<img src="https://img2018.cnblogs.com/blog/1418970/201810/1418970-20181010101234618-100093198.png" width="600" />
# 4.xpath
appium定位只支持3种,id,accessibility id,xpath。其中uiautomator2 accessibility id只针对content description。如果开发对与id的赋值不固定或简陋,每个包的id不一样,accessibility id也不一定存在。此时xpath就相当重要。
## 4.1.绝对定位不推荐
<font color=458B00>/xxx/ddd/dddd</font>
## 4.2.相对定位
* //* 获取所有控件
* //*[contains(@resource-id,'login')]
* //*[@text='登陆']
* //*[contains(@text,'登陆') and contains(@resource-id), 'login']
* //*[contains(@text, '登陆') or contains(@label,'登陆')] 获取text为登陆的控件
* //*[contains(@text, '看点')]/ancestor::*//*[contains(name(),'EditText')] 从看点的父类下面去寻找classname为EditText的控件
* //*[clickable="true"]//android.widget.TextView[string-length(@text)>0 and string-length(@text)<20] 所有元素下类名为android.widget.TextView且text长度在0-20之间的控件
## 4.3Android和iOS的属性对应,待补充
|android|ios|
----------|----------
tag class|tag
resourceId|null
content-desc|null
text|label
## 4.4.xpath定位验证
* 使用appium的inspector进行查找
* 将pagesource复制到https://www.freeformatter.com/xpath-tester.html/#ad-output网址去查找
# 5.webdriver 协议与手工模拟
## 5.1 .webdriver协议基础知识
## 5.2.session_id获取
* session_id=`curl http://127.0.0.1:4723/wd/hub/sessions|awk -F \" '{print $8}'`
## 5.3.element id获取
curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/elements --data-binary '{"using":"xpath","value":"//*[@class=\"android.widget.Toast\"]"}' -H "Content-Type:application/json;charset=UTF-8"
* 元素属性获取
curl http://127.0.0.1:4723/wd/hub/session/${session_id}/element/${element-id}/attribute/text
* 元素动作
curl -X POST http://127.0.0.1:4723/wd/hub/session/${session_id}/element/${$element_id}/click
# FAQ
## 1.如1.2全局隐式等待中代码,运行无效果,没有持续查找元素
## 2.执行System.out.println(driver.getPerformanceData("com.xueqiu.android", "cpuinfo", 10))时,appium报错如下
<img src="https://img2018.cnblogs.com/blog/1418970/201810/1418970-20181010095358396-1532949485.png" width="600" />
原因:1.应用信息更新不及 2.执行命令时该应用已停止
<img src="https://img2018.cnblogs.com/blog/1418970/201810/1418970-20181010095953538-270790384.png" width="600" />
解决:将cpuinfo方法提前或增加等待时间防止应用被杀死
## 3.全局隐私等待无效果
appium 3-4-1034等待、日志、性能数据、xpath定位、web driver协议的更多相关文章
- 通过ngx-lua来统计Nginx上的虚拟主机性能数据
Web server调研分析 Filed under: Web Server — cmpan @ 2012-10-29 20:38:34 摘要 简单可依赖的架构首先需要有一个简单可依赖的前端WebSe ...
- 手把手教你用Python抓取AWS的日志(CloudTrail)数据
数据时代,利用数据做决策是大数据的核心价值. 本文手把手,教你使用python进行AWS的CloudTrail配置,进行日志抓取.进行数据分析,发现数据价值! 如今是云的时代,许多公司都把自己的IT架 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- Java日志性能
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天 ...
- Performance Monitor采集性能数据
Performance Monitor采集性能数据 Windows本身为我们提供了很多好用的性能分析工具,大家日常都使用过资源管理器,在里面能即时直观的看到CPU占用率.物理内存使用量等信息.此外新系 ...
- Java日志性能那些事(转)
在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细想过该怎么打日志,日志对性能的影响究竟有多大呢?今天 ...
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- 使用Jyhon脚本和PMI模块监控WAS性能数据
使用Jyhon脚本和PMI模块监控WAS性能数据的优点有: 1.可以使用非交互的方式远程获取数据 2.不需要图形化模块支持 3.对各种was版本的兼容性较高 4.使用方便,官方自带 缺点也有很多: 1 ...
- mod_php和mod_fastcgi和php-fpm的介绍,对比和性能数据
1.php中fastcgi和php-fpm是什么东西 最近在研究和学习php的性能方面的知识,看到了factcgi以及php-fpm,发现我对他们是少之又少的理解,可以说几乎是一无所知,想想还是蛮可怕 ...
随机推荐
- 浏览器是怎样工作的:渲染引擎,HTML解析
渲染引擎 渲染引擎的职责是……渲染,也就是把请求的内容显示到浏览器屏幕上. 默认情况下渲染引擎可以显示HTML,XML文档以及图片. 通过插件(浏览器扩展)它可以显示其它类型文档.比如使用PDF vi ...
- (转)2017年12月宋华教授携IBM中国研究院、猪八戒网、中航信托、33复杂美共同论道智慧供应链金融
今年10月,国务院发布的<关于积极推进供应链创新与应用的指导意见>,不仅强调了发展服务型制造的重要性,同时也指出要积极稳妥发展供应链金融,推动供应链金融服务实体经济,鼓励商业银行.供应链核 ...
- URL的应用
1.对于Android来说,开发应用都会去访问服务器地址,那么就要连网,需要通过URL. 先new一个URL来获取路径,然后利用HttpURLConnection来连接并打开url,并通过get 请求 ...
- git中的分支管理
/*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 如果对git基础不太熟悉的可以参考:http://www.cnblogs.com/zengsf/p/750621 ...
- 利用git向github中推送文件
/*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 如果对git不够熟悉的学者,可以参考:http://www.cnblogs.com/zengsf/p/75062 ...
- linux环境下编译php扩展
1.使用ext_skel工具生成扩展框架 ./ext_skel --extname=myext 2.编辑config.m4文件 cd myext/vim config.m4 去掉以下内容的注释: PH ...
- 抓老鼠 codeForce 148D - Bag of mice 概率DP
设dp[i][j]为有白老鼠i只,黑老鼠j只时轮到公主取时,公主赢的概率. 那么当i = 0 时,为0 当j = 0时,为1 公主可直接取出白老鼠一只赢的概率为i/(i+j) 公主取出了黑老鼠,龙必然 ...
- CTF-练习平台-Misc之 妹子的陌陌
二十五.妹子的陌陌 该图片后缀名为rar,发现里面有一个文本 但是解压需要密码,应为不知道是几位的没法爆破,观察图片后发现红色字体:“喜欢我吗.”尝试一下,居然是密码,将文本解压出来 内容如下: 嘟嘟 ...
- Oracle 存储过程发送邮件
CREATE OR REPLACE PROCEDURE PROCSENDEMAIL(P_TXT VARCHAR2, ...
- lamba数据架构以及数据湖
面试大数据项目,面试过程中发现面试官提到的两个概念没有搞清楚: 1. lamba数据架构:这个概念的提出是由storm的作者提出来的,其实主旨就是想要说明,数据的处理分成三层,一类是批处理程序(bat ...