我在Appium中遇到AndroidDriver的问题, 目前,我正在使用此代码等待几次,以进行我的App登录/注册过程。
BasePage类:
protected AndroidDriver driver;
public BasePage(AndroidDriver driver) {
this.driver = driver;
}
public void waitFor(int second) {
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS);
}
并在此类上实施:
public class RegistrationPage extends base.BasePage {
public RegistrationPage(AndroidDriver driver) {
super(driver);
}
public RegistrationPage alreadyExistRegistration() {
waitForVisibilityOf(button_login);
swipeAndroid(1000, 1000, 100, 1000);
waitFor(1);
swipeAndroid(1000, 1000, 100, 1000);
waitFor(1);
swipeAndroid(1000, 1000, 100, 1000);
waitFor(1);
driver.findElement(button_register).click();
driver.findElement(input_dob).click();
driver.findElement(ok).click();
driver.findElement(phone_no).sendKeys("888888888");
driver.findElement(setup_pin).sendKeys("1111");
driver.findElement(confirm_pin).sendKeys("1111");
tapAndroid(840,1832);
driver.findElement(check_term).click();
driver.findElement(btn_next).click();
waitFor(10);
Assert.assertTrue(driver.findElement(message).getText().equalsIgnoreCase("Your Number is Already Registered"));
我已将参数最多编辑了50秒,但Junit测试中没有等待。在使用AndroidDriver之前,我正在使用WebDriver,它可以很好地工作,但是我需要Android Driver来执行TouchAction。 所以我的测试用例总是失败,因为在运行assert时,它将在元素尚不可用时立即查找到元素。
答案 0 :(得分:0)
我认为您有隐式等待错误的概念。我们不需要每次都设置它。我们需要在驱动程序初始化时设置一次(最大超时时间为60秒),然后它会在找到元素时等待。
与此同时,您可以使用超时值大于1分钟的显式等待,例如
WebDriverWait wait = new WebDriverWait (driver, 120);
并使用它的方法,
wait.until (ExpectedConditions.visibilityOfElementLocated (By.id ("your ID")));
完成此操作后,您无需在代码中的任何地方调用waitFor
方法。
这对我来说很好,我从不使用Thread.sleep()
。