如何找到具有dynamicID的按钮

时间:2018-05-01 11:14:37

标签: java selenium-webdriver xpath css-selectors appium-android

我正在使用Appium自动化Android应用,我们需要点击带有动态ID的按钮。按钮的ID为“PROFILEBUTTON”或ID为“PROFILEMAILBUTTON”。除了坐标之外,还有什么可以用来自动点击这个按钮?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

要识别动态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')]"));

答案 2 :(得分:0)

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

这对我有用。