Возможная проблема с Chromedriver 78, Selenium не может найти веб-элемент PDF, открытый в Chrome


17

Пока мой Google Chrome не был обновлен до версии 78, мой код работал нормально. Я также обновил chromedriver до версии 78.0.3904.70. Поэтому я больше не могу найти WebElement с id = 'plugin', используя Selenium WebDriver и Java:

<html>
<div id="content">
<embed id="plugin" type="application/x-google-chrome-pdf" src="http://??????????/offer_printed.php?printable=yes&amp;reanudar=&amp;>
</div>
</html>

Кроме этой части мои тесты работают нормально. У меня никогда не было подобной проблемы раньше. Я также пытался найти WebElement id = 'content', но получаю ту же ошибку.

WebDriverWait wait = new WebDriverWait (driver, 90);
WebElement scrollvalid = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("plugin")));

scrollvalid.sendKeys(Keys.PAGE_DOWN);                       scrollvalid.sendKeys(Keys.PAGE_DOWN);

Мой скрипт автоматизации должен найти элемент PDF и прокрутить страницу вниз. Вместо этого я получаю эту ошибку: org.openqa.selenium.TimeoutException: истекло время ожидания через 90 секунд в ожидании видимости элемента, расположенного с помощью By.id: plugin

Кто-нибудь сталкивается с подобной проблемой? Заранее спасибо.


Сегодня я удалил Google Chrome версии 78 и установил версию 76, и мой тест автоматизации снова работает. Все работает отлично. Я надеюсь, что эта проблема с версией 78 будет исправлена. Поэтому я использовал chromedriver (версия 78) и в своем файле .pom у меня есть следующая зависимость: <зависимость> <groupId> org.seleniumhq.selenium </ groupId> <artifactId> selenium-chrome-driver </ artifactId> <версия> 3.141.59 </ version> </ dependency>
Mix

У меня та же проблема. Код, который работал раньше, теперь не работает, потому что веб-драйвер не может найти любой веб-элемент, который я пытаюсь найти. Неявные и явные ожидания терпят неудачу одинаково. То, что я не смог определить, это тип элементов, с которыми у него проблемы, или если это просто компоненты, расположенные внутри iframe. В качестве обходного пути я добавлял Thread.sleepв места, где у меня было явное или явное ожидание перед этим обновлением.
hfontanez

Хром 78 с хромедрайвером 77 у меня работает.
Yun

Ответы:


5

Я столкнулся с той же проблемой.

Видимо Chrome автоматически обновляется. Вчера (29 октября 19 года) мой ChromeDriver начал жаловаться, что он не совместим с Chrome 78. Я обновил драйвер до версии 78. Я начал получать случайные исключения org.openqa.selenium.NoSuchElementException при попытке найти элементы, которые, как я подтвердил, были там. FindElement [s] также работают, когда я использовал точки останова. Я также пробовал неявное ожидание с ограниченным успехом.

Я пробовал решение ChromeOption от Zsbappa, но без радости.

Google затрудняет получение старых версий Chrome, но я нашел версию 76 по адресу https://www.neowin.net/news/google-chrome-76-offline-installer/ . Осторожно, онлайн-установщик устанавливает последнюю версию. Я вернулся к водителю за 76 и все хорошо. Все мои тесты Selenium снова работают.

Мой вывод заключается в том, что Chrome 78 и связанный с ним драйвер находятся в состоянии гонки, когда Selenium пытается запросить веб-страницу до ее завершения.


Я открыл выпуск 3198 с разработчиками ChromeDriver.
wdtj

1
Я получил следующий ответ на мою проблему: Спасибо, что сообщили об этой проблеме. Начиная с версии 77, Chromedriver не ожидает загрузки фреймов или фреймов при переходе на новую страницу или переключении окон. Это приводит к необходимости ожидания кода для доступности ресурсов. Большинство привязок имеют явное ожидание, а также настройки неявного ожидания. Ищите WebDriverWait в документации Selenium для получения дополнительной информации.
wdtj

Но мы используем явные ожидания, и это не помогает. Это помогает изменить iframes, но теги HTML больше не видны для встроенного PDF.
Mix

Я открыл новый выпуск для группы chromedriver
Mix

Вы можете использовать Chromium для испытаний, это базовая версия Chrome без услуг Google, он не будет обновляться , и он работает отлично с Chromedriver: chromium.org/getting-involved/download-chromium
Блейз

3

Мы столкнулись с аналогичной проблемой с Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.

В наших автоматических тестах Python Selenium мы наблюдали многочисленные сбои, когда казалось, что щелчки по элементам не происходили. Даже более странно, кажется, что элемент стал активным (как если бы он собирался щелкнуть), но фактическое событие щелчка никогда не происходило. В результате переключение страниц и т. Д. Не происходит, что приводит к различным сбоям в нисходящем направлении.

В процессе поиска ошибок и ошибок мы обнаружили, что использование стандартной функции .click () теперь ненадежно:

webdriver_element.click()

Но использование цепочек действий действительно представляется надежным:

ActionChains(context.browser).click(webdriver_element).perform()

Непонятно, почему это так. Сбои начались, как только мы обновились до Chrome 78.0.3904.7. Мы используем Chromedriver 77.0.3865.90, но те же тесты надежно проходят на версиях Chrome 77.x, поэтому кажется, что что-то не так или изменилось в Chrome 78.


Это мне очень помогло, спасибо.
Пьедоне

1

Добавив следующий аргумент, я решил свою проблему.

   ChromeOptions options = new ChromeOptions();
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-extensions");
    options.setExperimentalOption("useAutomationExtension", false);
    options.addArguments("--window-size=1920,1080");
    options.merge(seleniumCapabilities);
    driver = new ChromeDriver(options);

Привет @zsbappa! Спасибо за ваш ответ. Тем не менее, это не решает мою проблему. Проблема в том, что chromedriver (версия 78) не может найти какой-либо веб-элемент во встроенном pdf. Эта функция работала нормально, пока Google Chrome не был обновлен до версии 78. PS Я НЕ запускаю свои тесты в режиме без головы
Mix

Не ясно, как эти опции решают проблему с ОП.
Кэл Корбин

Это не решает проблему. Скорее всего, вы запускаете сценарии, в которых веб-элемент не находится внутри iframe.
hfontanez

1

Я столкнулся с той же проблемой, когда пытался получить доступ к вкладке внутри iframe, она работала нормально в версии 76. Теперь, когда она обновилась до 78, происходит сбой. Попробовал ожидания, неявное ожидание, сон, поиск элементов с помощью xpath, CSS, id, переключение контекста, прокрутка до просмотра и т. Д., Но безуспешно. Я использую Windows 10, 1809. Я не знаю, происходит ли это в других ОС.

Вот вопрос, который я поднял:

Проблема с использованием локаторов chromedriver 78.0.3904.70


1

Вчера я подтвердил, что эта проблема проявляется только тогда, когда элемент содержится в iframe. В этих случаях iframe расположен нормально. Однако попытка найти веб-элемент с помощью объектов ожидания драйвера или веб-драйвера приведет к значению NoSuchElementили TimeoutExceptionсоответственно.

Я предоставил команде chromedriver подробный журнал драйверов Chrome, и они работают над этим.

ОБНОВЛЕНИЕ : Из выпуска хромодрайвера 3223

Журналы показывают, что окончательное выполнениеContextCreated для кадра не завершается до тех пор, пока FindElement не вернет значение NULL. Начиная с версии 77, ChromeDriver перестал ждать загрузки всех кадров, прежде чем продолжить навигацию. К сожалению, это изменение не позволило дождаться загрузки текущего кадра. 3164 будет ждать загрузки текущего кадра; это должно препятствовать поиску FindElement до тех пор, пока фрейм не прекратит загрузку и не будет создан executeContext.

По сути, эта ошибка была введена в v.77. Многие из нас только заметили эту проблему, потому что мы обновились с v.76 до .v78. Говорят, что они нацелены на исправление .v80 (не v. 79). В качестве обходного пути я использую время Thread.sleepмежду переключением на iframe и попыткой найти компонент. Этот обходной путь работает отлично. Фактически, вы можете проверить это самостоятельно, просто запустив ваше приложение в режиме отладки. Когда вы приостановите выполнение (используя точку останова), вы заметите, что ваш оригинальный код (без спящего режима) работает нормально.


0

Например: вы можете попробовать использовать это ключевое слово!

1. implicit_wait=10
2. Sleep  10

Привет @Narasimhamurthy GN, спасибо за ваш ответ. Явное ожидание не является проблемой, я использую явное ожидание во всех своих тестах, и я не сталкиваюсь с подобной проблемой. Проблема в том, что chromedriver (версия 78) не может найти какой-либо веб-элемент во встроенном pdf.
Mix

Для меня некоторые тестовые случаи я также столкнулся с той же проблемой, для которой я использовал «geckodriver» (Firefox).
Нарасимхамурти Г.Н.

в противном случае используйте другое ключевое слово локатора библиотеки селена для поиска WebElement.
Нарасимхамурти Г.Н.

К сожалению, пользователям нашего веб-приложения рекомендуется использовать Chrome или Internet Explorer, Firefox по какой-то причине не рекомендуется. Вот почему я не могу использовать Firefox для автоматизации тестов. Я пытался использовать все возможные способы, чтобы найти любой веб-элемент в PDF, используя селен, но это не работает. Я также пытался использовать различные зависимости и хромированные драйверы, и ничего не работает.
Смешайте


0

Я была такая же проблема.

После автоматического обновления Chrome до версии 78.0 мои сценарии автоматического тестирования не выполнялись. Поэтому я обновил chromedriver до версии 78, но драйвер так и не смог найти какой-либо веб-элемент. После этого я попытался использовать несколько версий chromedriver и, наконец, моя проблема была решена с помощью chromedriver версии 2.44 .

Эту версию можно найти по адресу https://chromedriver.storage.googleapis.com/index.html?path=2.44/.


-1

Вы можете использовать менеджер пакетов Nuget , удалить диск Chrome и выполнить поиск chrome, загрузить новую версию selenium.web.driver.ChromeDriver >> для jsaKamoto

там вы найдете Chrome версии 78.


Спасибо за ответ, но он на самом деле не отвечает на проблему исключений NoSuchElement в chrome версии 78.
wdtj
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.