在进行 android 自动化测试过程中,点击一个按钮,需要等到新界面加载完成再继续进行操作,但是这个时间有长有短,用 treadsleep() 的方式太不稳定了,怎么写代码让等待到页面元素出现再进行操作?
比如我点击新建消息按钮,怎么等到新界面中的发送按钮出现再进行操作?或者等到页面特有的某个 text 出现也行。
我看到网上有个方法:

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.JavascriptExecutor;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.support.ui.ExpectedCondition;

import org.openqa.selenium.support.ui.WebDriverWait;

public class WaitForSomthing {

/**
* @author gongjf
*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.setProperty("webdriver.firefox.bin","D:\Program Files\Mozilla Firefox\firefox.exe");

WebDriver dr = new FirefoxDriver();

//设置 10 秒

dr.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

String url = "file:///C:/Documents and Settings/gongjf/桌面/selenium_test/Wait.html";// "/Your/Path/to/Wait.html"

dr.get(url);

//注释掉原来的

/WebDriverWait wait = new WebDriverWait(dr,10);
wait.until(new ExpectedCondition(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("b"));
}}).click();
/

dr.findElement(By.id("b")).click();

WebElement element = dr.findElement(By.cssSelector(".red_box"));

((JavascriptExecutor) dr).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);

}

}

这个封装的 class 只能用来等待特定某一个元素,我不同的界面要等待不同的元素出现,这个很不实用。
求大神们给支个招。


↙↙↙阅读原文可查看相关链接,并与作者交流