Реализация Selenium Fluent Wait в коде по-прежнему дает org.openqa.selenium.NoSuchElementException: нет такого элемента: невозможно найти элемент:

Упомянутый URL-адрес в коде занимает 5 секунд, чтобы отобразить экран входа в систему, и для того, чтобы ввести данные на странице входа, я реализовал в своем коде свободное ожидание в течение 10 секунд. Несмотря на то, что ожидание указано правильно, по какой-то причине это ожидание не выполняется, и я всегда отображаюсь с org.openqa.selenium.NoSuchElementException: нет такого элемента: Невозможно найти элемент:

КОД:

public class FluentWaitDemo {

    public static void main(String[] args) throws InterruptedException 
    {

        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://app.hubspot.com/login");
        By email = By.xpath("//input[@type='email']");
        WebElement userId = FluentWaitForElement(driver, email);
        userId.sendKeys("*******@gmail.com");
        driver.close();
    }

    public static WebElement FluentWaitForElement(WebDriver driver, By locator)
    {
        Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
                              .withTimeout(Duration.ofSeconds(10))
                              .pollingEvery(Duration.ofSeconds(2))
                              .ignoring(NoSuchElementException.class);

        return wait.until(ExpectedConditions.presenceOfElementLocated(locator));
    }
}

Ошибка:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@type='email']"}
  (Session info: chrome=83.0.4103.97)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html

person Bimlesh    schedule 10.06.2020    source источник
comment
если для этого требуется 10 секунд, ожидание работает правильно. Я бы просто использовал webdriverwait, хотя... это тоже свободное ожидание, но уже настроено с тем, что вам нужно... игнорирование, опрос и т. д.   -  person pcalkins    schedule 10.06.2020
comment
Любая идея, почему приведенный выше код по-прежнему не вызывает такого исключения элемента, когда все правильно упомянуто.   -  person Bimlesh    schedule 10.06.2020
comment
он будет игнорироваться в течение 10 секунд, это произойдет до истечения 10 секунд или после?   -  person pcalkins    schedule 10.06.2020
comment
Никакое такое исключение элемента не выдается через 10 секунд. В идеале мой код должен подавлять это сообщение, но по-прежнему не видит такого исключения элемента, и из-за этого... Я не могу ввести адрес электронной почты на странице входа. Этот сценарий отлично обрабатывается Webdriverwait, но я хочу понять, что не так с моим кодом, имеющим свободное ожидание.   -  person Bimlesh    schedule 11.06.2020
comment
предполагая тот же XPATH, не уверен, что происходит ... webdriverwait устанавливает опрос на 1/2 секунды, поэтому возможно, что на 8,5-9,5 секунд появится опция ?? Я бы также попробовал/перехватил вызов wait.until, чтобы узнать, не выдает ли это тайм-аут.   -  person pcalkins    schedule 11.06.2020


Ответы (1)


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

  • Используя cssSelector:

    driver.get("https://app.hubspot.com/login");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#username"))).sendKeys("[email protected]");
    
  • Используя xpath:

    driver.get("https://app.hubspot.com/login");
    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='username']"))).sendKeys("[email protected]");
    

Снимок браузера:

Хабсопт


Ссылка

Вы можете найти пару подробных обсуждений в разделе NoSuchElementException:

person DebanjanB    schedule 10.06.2020