如何使用动态 ID 定位按钮

How to locate a button with a dynamicID

我正在使用 Appium 自动化一个 Android 应用程序,我们需要在其中单击具有动态 ID 的按钮。该按钮的 ID "PROFILEBUTTON" 或 ID "PROFILEMAILBUTTON"。除了坐标,还有什么可以用来自动点击这个按钮?

您可以使用部分 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')]"));

要识别具有 动态 ID PROFILEBUTTONPROFILEMAILBUTTON 的元素,您可以使用 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')]"));

driver.findElement(By.xpath("//*[包含(@resource-id,'profileMailButton') 或包含(@resource-id,'profileMailPremiumButton')] "));

这对我有用。