Как найти кнопку внутри тега статьи с помощью Selenium через Java - PullRequest
1 голос
/ 10 июня 2019

Я не могу обнаружить кнопку внутри статьи с кодом ниже:

<article id="ride-f6ba24ca-d847-44b7-987e-81db6e6dee47" class="DetailPage__container--1VLdd"><div class="DetailPage__highlights--1uyrQ"><section></section><form aria-label="Offer highlights" class="DetailPage__section--qtXxV"><button type="submit"><span>Accept offer</span></button></form></div></article>

Я пытаюсь:

driver.findElement(By.xpath("//*[text()='Details']"))
driver.findElement(By.xpath("//button[.//span[text()='Accept offer']]"))

без удачи

Я не могу обнаружить элемент Принять предложение с селеном в Java

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Требуемый элемент является динамическим, поэтому для нахождения элемента вам нужно вызвать WebDriverWait для elementToBeClickable () , и вы можете использовать любую из следующих стратегий локатора:

  • cssSelector:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("article[class^='DetailPage__container--'][id^='ride-']>div[class^='DetailPage__highlights--'] button[type='submit']>span")));
    
  • xpath:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//article[starts-with(@class, 'DetailPage__container--') and starts-with(@id, 'ride-')]/div[starts-with(@class, 'DetailPage__highlights--')]//button[@type='submit']/span[text()='Accept offer']")));
    
0 голосов
/ 11 июня 2019

Наконец, ваш метод работает с методом ниже

private void waitForElement(By by, long delay) {
    LocalDateTime end = LocalDateTime.now().plusSeconds(delay);
    while (LocalDateTime.now().compareTo(end) <= 0) {
        if (driver.findElements(by).size() > 0) {
            break;
        }
    }
}

Сначала я запускаю метод wait, а затем проверяю, есть ли список с такими элементами ниже

if (driver.findElements(By.xpath("//article[starts-with(@class, 'DetailPage__container--') and starts-with(@id, 'ride-')]/div[starts-with(@class, 'DetailPage__highlights--')]//button[@type='submit']/span[text()='Accept offer']")).size() > 0){//Here i call the element}

Так что, если элемент существует, я могу вызвать его внутри, если нет исключения времени больше

...