【问题标题】:implicitlyWait and appWaitActivity not working in uiautomator2隐式等待和 appWaitActivity 在 uiautomator2 中不起作用
【发布时间】:2019-01-03 04:10:49
【问题描述】:

在添加功能(“automationname”、“uiautomator2”)之前,我的代码运行良好。但是,在我使用 uiautomator2 之后,implicitlyWait 不起作用。代码不会等待元素出现。如果元素不存在,自动化将很快关闭。从一项活动转移到另一项活动时也会发生这种情况。谁能帮我解决这个问题?

下面是我的设置代码:

public void setUp() {
      System.out.println("Creating session.....");
      String path = System.getProperty("user.dir");
      DesiredCapabilities cap = new DesiredCapabilities();
      cap.setCapability("platformName", "Android");
      cap.setCapability("platformVersion", "6.0.1");
      cap.setCapability("deviceName", "88929a3d");
      cap.setCapability("automationName", "uiautomator2");
      cap.setCapability("appPackage", "io.selendroid.testapp");
      cap.setCapability("appActivity", "HomeScreenActivity");
      cap.setCapability("appWaitActivity", "HomeScreenActivity, RegisterUserActivity");
      cap.setCapability("appWaitDuration", 3000);
      cap.setCapability("app", path + "//apk//selendroid.apk");
      try {
          driver = new AndroidDriver<>(new URL("http://localhost:4723/wd/hub"), cap);
      } catch (MalformedURLException e) {
          e.printStackTrace();
      }

      driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
      System.out.println("Session is created successfully");
  }

【问题讨论】:

  • 如果设置“Appium”而不是“uiautomator2”会发生什么?
  • 您根本不需要设置该功能。但是,您应该考虑将驱动程序声明更改为 AndroidDriver&lt;AndroidElement&gt; 并在代码中使用 AndroidElement 对象而不是 WebElement 对象。
  • @pankajmishra 它将返回到 uiautomator 并且不再使用 uiautomator2
  • @BillHileman 我已经尝试过了,它不会影响任何事情。我仍然能够找到所有元素。这对我的情况没有影响

标签: java android automation appium android-uiautomator


【解决方案1】:

ImplicitWait 不是元素等待的解决方案。这是一种设置在尝试查找元素时拉取 DOM 的超时时间(如果它不是立即可用的)。

使用显式等待等待元素:

new WebDriverWait(driver,<timeoutInSeconds>)
             .until(ExpectedConditions.presenceOfElementLocated(<locator>));

注意: 在您的代码中设置 appWaitDuration capability

用于等待 appWaitActivity 启动的超时时间(毫秒) (默认 20000)

它与元素无关,我认为 3 秒是不够的

【讨论】:

  • 但我的问题是,如果我使用的是 uiautomator 而不是 uiautomator2,那么implicitlyWait 也能正常工作。只要超时,Appium 就会等待元素,并在元素出现后立即继续。
  • 我正在使用 UiAutomator2 并且隐式等待非常有效。让您的案例发布 Appium 服务器日志、服务器版本和 java 客户端版本
  • 我使用 appium 1.8.1 版和 Java 1.8.1
  • 添加代码 sn-p 和 appium 服务器日志以帮助了解您的问题
猜你喜欢
  • 2020-01-20
  • 2017-07-17
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多