如何通过Selenium和Java处理以下动态ID?

时间:2018-09-16 15:07:58

标签: java selenium xpath css-selectors webdriver

您介意帮助我了解如何处理此动态ID吗? 这是我已经尝试过的情况:

driver.findElement(By.xpath("//input[contains(@id,'Username')]")).sendKeys("aaa");

driver.findElement(By.xpath("//input[starts-with(@id,'undefined-undefined-Username-')]")).sendKeys("aaa");

driver.findElement(By.xpath("//*[@type='text']")).sendKeys("aaa");

无法找到该元素。

image

1 个答案:

答案 0 :(得分:1)

根据 HTML ,您共享的元素是 dynamic 元素。要在所需元素上调用click(),可以使用以下解决方案之一:

  • cssSelector

    driver.findElement(By.cssSelector("label[for^='undefined-undefined-Username-']")).sendKeys("aaa");
    
  • xpath

    driver.findElement(By.xpath("//label[starts-with(@for,'undefined-undefined-Username-')][contains(.,'Username')]")).sendKeys("aaa");
    

更新

由于该元素是动态元素,因此您可能需要诱使 WebDriverWait ,以使所需的元素可点击,如下所示:

  • cssSelector

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("label[for^='undefined-undefined-Username-']"))).sendKeys("aaa");
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//label[starts-with(@for,'undefined-undefined-Username-')][contains(.,'Username')]"))).sendKeys("aaa");