appium - Android Appium - AndroidDriver Appium 的隐式等待不起作用
问题描述
我在 Appium 中的 AndroidDriver 有一些问题,目前我正在使用此代码等待几次以提供我的应用程序登录/注册过程。
基页类:
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 驱动程序来执行 TouchAction。所以我的测试用例总是失败,因为当断言运行时它会立即找到元素,而它还不可用。
解决方案
我认为您对隐式等待的概念有误。我们不需要每次都设置它。我们需要在驱动程序初始化时设置一次,最大超时时间为 60 秒,它会在找到元素时等待元素。
除此之外,您可以使用超时值大于 1 分钟的显式等待,例如,
WebDriverWait wait = new WebDriverWait (driver, 120);
并使用它的方法,
wait.until (ExpectedConditions.visibilityOfElementLocated (By.id ("your ID")));
完成此操作后,您无需waitFor
在代码中的任何地方调用方法。
这对我来说很好,我从不使用Thread.sleep()
.
推荐阅读
- g++ - 当 fPIC 已经使用时,在创建共享对象时不能使用重定位 R_X86_64_PC32 对符号
- kotlin - Kotlin REPL 算术
- ios - 在 XCode 的 Copy Files Build Phase 中保留目录结构
- typescript - OpenFL bitmapData.getPixel32 总是返回 0
- django - Django中相同实体的不同一对多关系
- numpy - 关于切片 Numpy 张量的简单问题
- java - 如何强制专注于 NumberPicker (android)?
- c - C程序未填充应由条件填充的写入文件
- c# - 从 NLog 配置中获取日志文件,而不是硬编码
- excel - 如何从字符串excel公式中提取文本不起作用