【问题标题】:How to handle the following dynamic ID through Selenium and Java?如何通过 Selenium 和 Java 处理以下动态 ID?
【发布时间】:2019-02-20 15:39:53
【问题描述】:
您是否介意帮助我了解如何处理此动态 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");
找不到那个元素。
【问题讨论】:
标签:
java
selenium
xpath
css-selectors
webdriver
【解决方案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");