IllegalStateException: невозможно найти элемент по имени для com.gargoylesoftware.htmlunit.UnexpectedPage с HtmlUnitDriver, в то время как getTitle () - PullRequest
0 голосов
/ 29 октября 2018

Вот мой основной код для запуска браузера HTMLUnit и получения заголовка. во время выполнения кода я получаю заголовок как ноль, и позже он выбрасывает следующее выполнение:

Используемые банки:

  • HtmlUnit-водитель-2.33.0-банку-с-dependencies.jar
  • Селен-сервер автономный-3.14.0.jar

Кодовые испытания:

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class HtmlUnitDriverTest {

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

        WebDriver driver = new HtmlUnitDriver();
        Thread.sleep(5000);
        driver.get("https://google.com");
        System.out.println(driver.getTitle());

        driver.findElement(By.name("q")).sendKeys("testing");

    }

}

O / p:

Исключение в потоке "main" java.lang.IllegalStateException: невозможно найти элемент по имени для com.gargoylesoftware.htmlunit.UnexpectedPage@2e32ccc5

at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementByName (HtmlUnitDriver.java:1285)

1 Ответ

0 голосов
/ 29 октября 2018

Вам нужно учесть пару фактов:

  • Ввод Thread.sleep(5000); сразу после вызова HtmlUnitDriver() на самом деле не имеет смысла. Вы могли бы использовать Thread.sleep(5000); после того, как вызвали driver.get(). Однако согласно передовым методикам жестко закодированные Thread.sleep(n) и неявные ожидания должны быть заменены на WebDriverWait .

  • Здесь вы можете найти подробное обсуждение Заменить неявное ожидание явным ожиданием (selenium webdriver & java)

  • Вы видите title как null , когда драйвер пытается извлечь Page Title даже до Page Title отображается в HTML DOM

  • В качестве решения, использующего htmlunit-driver-2.33.0-jar-with-dependencies.jar , вам нужно вызвать WebDriverWait для Заголовок страницы до содержат последовательность символов перед извлечением, и вы можете использовать следующее решение:

  • Кодовый блок:

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.htmlunit.HtmlUnitDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class A_HtmlunitDriver_2_33_0 {
    
        public static void main(String[] args) throws InterruptedException {
    
            WebDriver driver = new HtmlUnitDriver();
            driver.get("https://google.com");
            new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Go"));
            System.out.println(driver.getTitle());
        }
    }
    
  • Консольный вывод:

    Google
    
...