NoSuchElementExeption, selenium, неспособный найти элемент

я хотел бы найти свой TextField в seleniumе, но я не знаю, как (я использую sellenium в первый раз).

Я пытался:

driver.findElement(By.id("originTextField")) 

или с помощью xPath и cssSelector String, созданных хром в инструментах dev.

Пожалуйста, помогите мне, я был бы признателен за разъяснения.

это html:

введите описание изображения здесь

NoSuchElementException

org.openqa.selenium.NoSuchElementException, широко известный как NoSuchElementException, extends org.openqa.selenium.NotFoundException, который является типом исключения WebDriverException .

NoSuchElementException может быть выброшено в 2 случаях следующим образом:

  • При использовании WebDriver.findElement(By by) :

     //example : WebElement my_element = driver.findElement(By.xpath("//my_xpath")); 
  • При использовании WebElement.findElement(By by) :

     //example : WebElement my_element = element.findElement(By.xpath("//my_xpath")); 

В соответствии с JavaDocs, как и любое другое исключение WebDriverException , NoSuchElementException должно содержать следующие константные поля :

 Constant Field Type Value SESSION_ID public static final java.lang.String "Session ID" eg (Session info: chrome=63.0.3239.108) DRIVER_INFO public static final java.lang.String "Driver info" eg (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86) BASE_SUPPORT_URL protected static final java.lang.String "http://seleniumhq.org/exceptions/" eg (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html) 

причина

Причиной исключения NoSuchElementException может быть одно из следующих:

  • Страtagsя локатора, которую вы приняли, не идентифицирует ни одного элемента в HTML DOM .
  • Страtagsя локатора, которую вы приняли, не может идентифицировать элемент, поскольку он не находится в видовом окне браузера.
  • Страtagsя локатора, которую вы приняли, идентифицирует элемент, но невидима из-за наличия атрибута style = “display: none;” ,
  • Страtagsя локатора, которую вы приняли, не однозначно идентифицирует нужный элемент в HTML DOM и в настоящее время находит какой-то другой скрытый / невидимый элемент.
  • WebElement, который вы пытаетесь найти, находится в .
  • Экземпляр WebDriver ищет WebElement еще до того, как элемент присутствует / видимо внутри HTML DOM .

Решение

Решение для обращения к исключению NoSuchElementException может быть одним из следующих:

  • Примите страtagsю локатора, которая однозначно идентифицирует желаемый WebElement . Вы можете воспользоваться инструментами разработчика ( Ctrl + Shift + I или F12 ) и использовать Element Inspector .

    Здесь вы найдете подробное обсуждение того, как проверить элемент в selenium3.6, поскольку firebug больше не является вариантом для FF 56?

  • Используйте executeScript() для прокрутки элемента для просмотра следующим образом:

     WebElement elem = driver.findElement(By.xpath("element_xpath")); ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", elem); 

    Здесь вы найдете подробное обсуждение прокрутки вверху страницы в Python с использованием Selenium

  • Элемент incase имеет атрибут style = “display: none;” , удалите атрибут с помощью executeScript() следующим образом:

     WebElement element = driver.findElement(By.xpath("element_xpath")); ((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", element) element.sendKeys("text_to_send"); 
  • Чтобы проверить, находится ли элемент внутри switchTo() чтобы найти соответствующий и switchTo() желаемый iframe одним из следующих способов:

     driver.switchTo().frame("frame_name"); driver.switchTo().frame("frame_id"); driver.switchTo().frame(1); // 1 represents frame index 

    Здесь вы можете найти подробное обсуждение о возможности переключения на элемент в кадре без использования frame.switchTo (). Frame (“frameName”) в Selenium Webdriver Java? ,

  • Если элемент отсутствует / видимый в HTML DOM немедленно, вызывают WebDriverWait с ExpectedConditions, установленным надлежащим способом следующим образом:

    • Ожидание присутствияOfElementLocated :

       new WebDriverWait(driver, 20).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']"))); 
    • Чтобы подождать visibilityOfElementLocated :

       new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']"))); 
    • Подождать, пока элемент elementToBeClickable :

       new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='buttonStyle']//input[@id='originTextField']"))); 

Ваш код верен, я подозреваю, что проблема вызвала не полную загрузку страницы, когда вы находите элемент.

Попробуйте добавить длинный сон перед тем, как найти элемент, если добавление сна сработало, измените сон на ожидание.

Вот код. Это означает, что ждать 10 секунд, если элемент отсутствует:

 element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "originTextField")) ) 
  • Условные имена classов не поддерживают ошибку в WebDriver
  • неизвестная ошибка: результат функции вызова отсутствует «значение» для Selenium Send Keys даже после обновления хромированной передачи
  • Selenium 2.0b3 IE WebDriver, нажмите, не стреляйте
  • Selenium WebDriver выбрасывает исключения времени ожидания спорадически
  • Selenium Web Driver и Java. Элемент не кликается в точке (36, 72). Другой элемент получит клик:
  • Как разрешить исключение Stale? если элемент больше не привязан к DOM?
  • Эквивалент waitForVisible / waitForElementPresent в тестах Selenium WebDriver с использованием Java?
  • Почему нужно предпочитать использование CSS поверх XPath в IE?
  • Как обрабатывать диалоговое окно печати в Selenium?
  • Дождитесь загрузки страницы в Selenium
  • Webdriver: загрузка файла
  • Давайте будем гением компьютера.