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();
    }

1418970-20181007101704739-1198076946.png

1.2全局隐式等待

一段时间内,会不断的查看当前页面是否有某个控件。存在就返回;否则就一直寻找,直到超时。默认值是0,即不等待
    driver.manager().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
    @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();
    }

1418970-20181007104631555-1038854241.png
问题:隐式等待设置无效,没有继续寻找

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();
    }

1418970-20181007102323219-313784234.png

2.log

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

1418970-20181007124120884-1773207898.png

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

1418970-20181007124317976-300065134.png

    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);
        }
    }

1418970-20181007125059161-1204537566.png

3.手机性能数据

python目前不支持

 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);
    }

1418970-20181010101234618-100093198.png

4.xpath

appium定位只支持3种,id,accessibility id,xpath。其中uiautomator2 accessibility id只针对content description。如果开发对与id的赋值不固定或简陋,每个包的id不一样,accessibility id也不一定存在。此时xpath就相当重要。

4.1.绝对定位不推荐

/xxx/ddd/dddd

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的属性对应,待补充

androidios
tag classtag
resourceIdnull
content-descnull
textlabel

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报错如下

1418970-20181010095358396-1532949485.png
原因:1.应用信息更新不及 2.执行命令时该应用已停止
1418970-20181010095953538-270790384.png
解决:将cpuinfo方法提前或增加等待时间防止应用被杀死

3.全局隐私等待无效果

转载于:https://www.cnblogs.com/csj2018/p/9749571.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值