如何在使用appium时重用元素

时间:2015-09-09 11:44:40

标签: mobile appium ui-automation getelementbyid

我很想知道在使用appium时如何重用元素。

elementSerarch返回一个由Appium生成的ID,我想知道是否有办法通过它的id重用相同的元素?

如果没有,那么元素id的目的是什么?

由于

1 个答案:

答案 0 :(得分:1)

您可以创建页面对象模型(POM)是元素可重用性的最佳方式,但是这些重用元素在不同页面上基本上没有相同的ID,因此您可能会得到。

  

NoSuchElement例外。

通过分离出可重用的组件将使您的工作更易于管理。

使用POM您可以将元素存储到变量中,并将它们传递到任何您想要的位置。

WebElement element = driver.findElement(By.id("xyz"));

首选的选择器顺序应为:id>名称> css> XPath的, id和name通常是最容易和最确定的方式。 xpath通常很脆弱,css是id和name结合的方式!

但有时因为页面刷新/加载这些元素可能在以后使用时不可用,所以首选的方法是创建Page Class并编写方法来查找这些元素,比如

 public class LoginPage extends BasePage {
           public void loginButton_Click() { 
                WebElement element = driver.findElement(By.id("xyz")).click();
}  
        }

在这里,您可以列出在特定页面上查找不同元素的所有方法,现在只需要在需要使用该元素时调用该方法。

对于使用它的查找元素,如果你使用uiautomatorviewer这样的工具,我会担心你会得到开发人员生成的ID,这样你可以使用相同的Id多次想要,

如果您正在讨论由Appium生成的ID,例如:info: [debug] [BOOTSTRAP] [debug] Returning result: {"value":{"ELEMENT":"1"},"status":0}

这里id:1是appium的内部引用,用于将来调用测试代码中各个元素的操作。我更喜欢使用驱动程序来查找元素,

元素的ID 理想情况下,element.getId()方法可用于返回一个String,表示一个元素的ID,但每当我尝试使用时,它总是向我返回1,你也可以使用,

WebElement element = driver.findElements(By.xpath("XOXOXOXO"));
element.getAttribute("id");

最后,您需要此ID才能执行Click / Swipe / long click以及您希望进行自动化测试的许多其他事件,基本上过程如下:

  

获取元素的ID /名称/ xpath(使用不同的方法或   uiautomatorviewer等工具

     

按名称/ Id / xpath等找到该元素。

     

执行必要的操作

所以Id只是查找元素的一种方法,您可以按照自己的方式重复使用它。