有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java应用程序:使用XPath通过部分elementId/UID查找元素

我正在为iOS应用程序进行测试自动化。 我在MacOS(10.15)上使用Appium桌面客户端(1.15.1),并通过Inspector在Iphone 11(13.3)上找到具有以下属性的元素: screenshot from the attributes

的目标是使用appium(6.1.0)和selenium(3.13.0)在java中执行以下操作:

通过elementId找到这个元素并获得变量值(在本例中为2,6 km)

问题正在到达元素。在Inspector中,accessibility-idname始终等于该值,这意味着我无法用它们定位元素。 {}不是固定的,它在第三个数字块之后变化(这意味着我只能使用45000000-0000-0000。)我还可以使用"UID"属性中的代码从检查器中复制这个elementId

为了本地化元素,我尝试了以下方法:

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中写些什么,才能通过检查器的elementId部分(或属性UID)找到元素,然后读取值


共 (1) 个答案

  1. # 1 楼答案

    我会尝试这个安全选项:

    //*[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')]