我正在使用Appium为iOS本机应用程序编写UI自动化测试,并逐渐意识到大多数元素定位策略无法可靠地用于iOS。
除了随机运行的XPath之外,我还有其他选择:
我一直在努力了解如何使用iOS UiAutomation定位器策略并找到使用它的元素,但它不适用于Appium Inspector。我已经提到了这些文档(Appium iOS Predicate reference,Apple UIAutomation reference),但我觉得它们迎合了一些高级Appium用户,他们对iOS开发有一定的了解,而不是初学者。
我目前的自动化设置是:
使用UiAutomation谓词策略,我可以使用什么定位器来定位突出显示的元素?我一直在Appium Inspector上尝试一些选项,如:
applications()[0].windows()[0].navigationBars()[0].textFields().withPredicate("value == 'Search eBay'")
.textFields().withPredicate("value == 'Search eBay'")
这些没用。我在这做错了什么?是否有其他文件可以从头开始清楚地解释iOS UiAutomation定位器?如果有人可以解释这些基础知识,那将会非常有用。
答案 0 :(得分:0)
我以前从未使用过Appium,但我在javascript中使用过UIAutomation。
你可以使用:
找到元素....textFields().firstWithName("Search eBay")
请注意,UIAuatomation使用UIAccessibility协议。 value
的{{1}}是UITextField
,其中一个将等于搜索到的文本,而不是占位符。在字段中输入内容后,您就可以使用accessibilityValue
。
当然,在您的情况下,抓取第一个文本字段也会起作用,因为导航栏中只有一个。
答案 1 :(得分:0)
只需使用此.navigationsBars()[" EBUH_whateverstring"]。textfields()["搜索eBay"]。textfields()["搜索eBay"]
更好的方法是,如果应用程序代码在Swift中,则在代码位于Obj-C或辅助功能标识符的情况下,请求dev添加辅助功能ID。否则,如果传递的元素值是动态的,则测试将在对此元素断言或执行操作时失败。
另一种故障保护方法是使用数组值。
.navigationsBars()[0] .textfields()[0] .textfields()[0] - >检查元素的数组值是[0]还是其他任何值。您可以使用此appium应用程序从显示元素的xpath值的位置获取数组值。或者你可以使用XCode Instruments,如果你有权访问代码来找到UIAutomation解释它的确切值。
答案 2 :(得分:-1)
如果您要在Appium中查找元素,则必须编写代码才能执行此操作。假设您正在使用Java,这是我用于代码的方式,您找到这些元素的方式是通过驱动程序,表和行。
这是什么意思?每个元素都有一个与之关联的XPath,因此这样做的一种方法是
driver.findElementByXPath("xpath_string_here");
例如,在尝试运行断言时,这非常有用。使用上面的代码,让我们说我们想断言它的名称是有效的。我们可以说:
AssertEquals(driver.findElementByXPath("xpath_string_here").getAttribute("name"), 'Practice Example");
当我提到表格和行时,我的意思是做这样的事情:
MobileElement table = (MobileElement) driver.findElementByXPath("string here");
List<WebElement> rows = driver.findElementByClassName("Class name here");
这段代码有什么作用?它创建一个MobileElement类型的变量,它将遍历您想要的xPath,然后rows值将在该表视图中找到该类名称的元素。所以在上面的图像中,我会停在UIAWindow的XPath,然后告诉我的行使用类名“UIAButton”来查找元素。
此时,如果你想对它们运行某些操作,例如.click();这是一个简单的循环问题。使用.get(int i)方法使用它们的索引。例如:rows.get(i).click();
这对您的问题有帮助吗?