org.openqa.selenium.NoSuchElementException: невозможно найти элемент: - поле поиска - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь найти в поле поиска обучения в linkedin (https://www.linkedin.com/learning/me?trk=nav_neptune_learning)

  1. Войти в систему
  2. Нажмите на ссылку «Обучение» (в правом верхнем углу)
  3. Я отправляю клавиши табуляции и попадаю в поле «поиск»
  4. Наконец, найдите поле «поиск» с помощью xpath, и я отправляю ключевое слово поиска (.sendKeys («Python»))

Селен с Java:

driver.findElement(By.xpath("//div[@class='search-container']/descendant::input[@type='text']")).sendKeys("Python");

До шага 3, все работает, поле поиска подсвечивается.

Последний шаг всегда завершается неудачей, за исключением

org.openqa.selenium.NoSuchElementException: Невозможно найти элемент:

Я попробовал следующий xpath:

//div[@class='container global-nav__container']//div[@class='search-container']/artdeco-typeahead[@id='ember863']/div/input[@type='text']
//div[@class='search-container']/descendant::input[@type='text']
//div[@class='search-container']/artdeco-typeahead[@id='ember863']/div/input[@type='text']
//div[@class='search-container']/artdeco-typeahead/div/input[@type='text']

enter image description here Интересная вещь со всем вышеxpath, я могу найти элемент в broswer, но тот же xapth не работает в коде селена.

Мой код -Step 4

@Test
    public static void search() throws InterruptedException, AWTException
    {

        Robot robot = new Robot();
        for ( int i=0; i<=5;i++)
        {
        robot.keyPress(KeyEvent.VK_TAB);
        Thread.sleep(2000);
        }
        driver.findElement(By.xpath("//input[@type='text']")).sendKeys("Python");
    }

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

NoSuchElementException обычно происходит в 2 сценариях.

  1. Неправильный локатор Webelement (что не похоже на ситуацию в вашем случае)
  2. Вы пытаетесь найти веб-элемент еще до его загрузки на страницу (похоже, это ваша проблема)

Вы получаете «NoSuchElementException», потому что вы вводите текст еще до полной загрузки webelement на странице.

Я бы посоветовал вам подождать до загрузки нужного вам веб-элемента, а затем использовать sendkeys. Использование можно использовать WebDriverWait класс

поэтому переработанный код должен выглядеть примерно так:

//Initializing the 'wait' with a 30 seconds deplay before it throws a NoSuchElementException
WebDriverWait wait = new WebDriverWait(driver,30);

wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("input[placeholder='Search for skills, subjects or software']"));

driver.findElement(By.cssSelector("input[placeholder='Search for skills, subjects or software']")).sendKeys("Python");
0 голосов
/ 19 ноября 2018

Ниже код будет работать для вас:

driver.findElement(By.cssSelector("input[placeholder='Search for skills, subjects or software']")).sendKeys("Python");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...