How to locate a button with a dynamicID

后端 未结 3 1478
轮回少年
轮回少年 2020-12-22 13:13

I am automating an Android app using Appium where we need to click a button with a dynamic ID. Either the button has ID \"PROFILEBUTTON\" or ID \"PROFILEMAILBUTTON\". Apart

相关标签:
3条回答
  • 2020-12-22 13:24

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

    This worked for me.

    0 讨论(0)
  • 2020-12-22 13:29

    You can use partial id

    driver.findElement(By.cssSelector("[id*='PROFIL'][id*='BUTTON']"));
    

    Or with xpath

    driver.findElement(By.cssSelector("//*[contains(@id, 'PROFIL') and contains(@id, 'BUTTON')]"));
    
    driver.findElement(By.cssSelector("//*[contains(@id, 'PROFIL')][contains(@id, 'BUTTON')]"));
    
    0 讨论(0)
  • 2020-12-22 13:45

    To identify an element with dynamic ID either PROFILEBUTTON or PROFILEMAILBUTTON you can use cssSelector with the following wildcards :

    • ^ : To indicate an attribute value starts with

    • $ : To indicate an attribute value ends with

    So the most granular locator would include the strategy to lookout for the initial letters i.e. PROFILE and the ending letters i.e. BUTTON and should be :

    driver.findElement(By.cssSelector("[id^='PROFILE'][id$='BUTTON']"));
    

    Update

    As per your comment update, you can use either of the equivalent xpath as follows :

    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')]"));
    
    0 讨论(0)
提交回复
热议问题