我正在为iOS应用程序进行自动化测试。 我在MacOS(10.15)上使用Appium桌面客户端(1.15.1),并通过Inspector在Iphone 11(13.3)上找到了具有以下属性的元素: screenshot from the attributes
目标将在Java中使用鸦片(6.1.0)和硒(3.13.0)进行以下操作:
通过elementId
查找此元素并获取变量值(在本例中为2.6 km)。
问题已到达要素。在检查器中,accessibility-id
和name
始终等于值,这意味着我无法使用它们来定位元素。
elementId
不是固定的,它在第三个数字块之后变化(这意味着我只能使用45000000-0000-0000。)我还可以使用以下代码从检查器中重现此elementId
: "UID"
属性。
要对元素进行本地化,我尝试了以下操作:
appiumDriver.findElementByXPath("//*[contains(@id,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@name,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@uid,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@elementId,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@RuntimeId,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@ProcessId,'45000000-0000-0000')]");
appiumDriver.findElementByXPath("//*[contains(@class,'45000000-0000-0000')]");
然而,在所有这些尝试查找元素的尝试中,都出现了org.openqa.selenium.NoSuchElementException
。
我的问题现在是什么,我必须在xpath
中写什么才能通过检查器(或属性UID)中的elementId部分找到元素,然后能够读出该值。
答案 0 :(得分:0)
我会尝试使用此安全选项:
//*[local-name(@*)="@elementId"][starts-with(normalize-space(string(@*)),"45000000-0000-0000")]
EDIT:contains选项不起作用,因为elementId不是元素的第一个属性。
您可以尝试:
//*[@*="45000000"]
如果这不起作用,请使用:
//*[contains(@*[2],'45000000')]
//*[contains(@*[3],'45000000')]
//*[contains(@*[4],'45000000')]
//*[contains(@*[5],'45000000')]
//*[contains(@*[6],'45000000')]
//*[contains(@*[7],'45000000')]
//*[contains(@*[8],'45000000')]
//*[contains(@*[9],'45000000')]
//*[contains(@*[10],'45000000')]
//*[contains(@*[11],'45000000')]