Как обработать следующий динамический идентификатор через Selenium и Java? - PullRequest
0 голосов
/ 16 сентября 2018

Не могли бы вы помочь мне понять, как я могу справиться с этим динамическим идентификатором? Вот случаи, которые я уже пробовал:

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 голосов
/ 16 сентября 2018

Согласно HTML , которым вы поделились, элемент является динамическим элементом. Чтобы вызвать 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");
    
...