在进行 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 只能用来等待特定某一个元素,我不同的界面要等待不同的元素出现,这个很不实用。
求大神们给支个招。