如何使用动态 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 PROFILEBUTTON 或 PROFILEMAILBUTTON 的元素,您可以使用 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')] "));
这对我有用。
我正在使用 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 PROFILEBUTTON 或 PROFILEMAILBUTTON 的元素,您可以使用 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')] "));
这对我有用。