我很想知道在使用appium时如何重用元素。
elementSerarch返回一个由Appium生成的ID,我想知道是否有办法通过它的id重用相同的元素?
如果没有,那么元素id的目的是什么?
由于
答案 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只是查找元素的一种方法,您可以按照自己的方式重复使用它。