我正在使用Appium自动化一个Android应用程序,我们需要单击带有动态ID的按钮。该按钮具有ID“ PROFILEBUTTON”或ID“ PROFILEMAILBUTTON”。除了坐标以外,还有什么可以用来自动单击此按钮的?
使用PROFILEBUTTON或PROFILEMAILBUTTON用动态ID标识元素,可以将cssSelector与以下通配符结合使用:
^:表示属性值以
$:表示属性值以[]结尾
因此,最精细的定位符应包括寻找开头字母(即PROFILE和结尾字母即BUTTON)的策略,并且应为:
driver.findElement(By.cssSelector("[id^='PROFILE'][id$='BUTTON']"));
根据您的评论更新,您可以如下使用等效的xpath之一:
driver.findElement(By.xpath("//*[contains(@resource-id,'profileMail') and contains(@resource-id,'Button')]"));
//or
driver.findElement(By.xpath("//*[contains(@resource-id,'profileMailButton') or contains(@resource-id,'profileMailPremiumButton')]"));
您可以使用部分ID
driver.findElement(By.cssSelector("[id*='PROFIL'][id*='BUTTON']"));
或带有xpath
driver.findElement(By.cssSelector("//*[contains(@id, 'PROFIL') and contains(@id, 'BUTTON')]"));
driver.findElement(By.cssSelector("//*[contains(@id, 'PROFIL')][contains(@id, 'BUTTON')]"));
driver.findElement(By.xpath(“ // * [包含(@ resource-id,'profileMailButton')]或包含(@ resource-id,'profileMailPremiumButton')]”))))]]
这对我有用。