51Testing软件测试论坛

标题: Appium 三种wait方法(appium 学习之改造轮子) [打印本页]

作者: Mario洁    时间: 2018-3-12 14:37
标题: Appium 三种wait方法(appium 学习之改造轮子)
学过selenium的都知道,一般等待元素加载有三种办法:

sleep                  Thread.sleep(60000) 强制等待60s
implicitlyWait      
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);  


    隐式等待,全局等待30s不管元素是否已经加载
WebDriverWait     显示等待,这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait
和util来决定,比如这个timeOut是60,如果该元素60s以内出现就不在等待

  1. WebDriverWait wait = new WebDriverWait(driver, 60);
  2.     WebElement e= wait.until(new  ExpectedCondition<WebElement>() {
  3.             @Override
  4.             public WebElement apply(WebDriver d) {
  5.                 return d.findElement(By.id("q"));
  6.             }
  7.         })
复制代码
以上三种方法中,只用WebDriverWait是selenium所特有,在java-client中也找不到相应,如果想使
用这种方法怎么办?

改造轮子,首先添加AndroidDriverWait.java, 其实是将WebDriverWait的类型改成AndroidDriverWait

具体代码如下:



View Code
接着需要修改接口:ExpectedCondition,将其WebDriver的类型替换为AndroidDriver

具体代码:

View Code
经过修改之后,就可以在appium中直接使用:
  1. //wait for 60s if WebElemnt show up less than 60s , then return , until 60s
  2.         WebElement showClose = new AndroidDriverWait(driver, 60)
  3.                 .until(new ExpectedCondition<WebElement>() {
  4.                     public WebElement apply(AndroidDriver d) {
  5.                         return d.findElement(By
  6.                                 .id("com.zhihu.android:id/showcase_close"));
  7.                     }

  8.                 });
复制代码
个人心得:

          做自动化也有4年多,之前做的是server端的测试,并未太多的关注过selenium,现在selenium
上面的积累已经一年多,

           起初学东西是拿来用,不知其原理,只知道这么用,长期以来,并未有什么进步。最近看到
一些大牛分享的学习思路,才发现学东西要循序渐进,

           学会使用->熟练使用->了解掌握其原理->分析改造源码->造轮子

          经过这一系列的学习和总结,就能成为资深人士。






欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2