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

Пока мой 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

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

Ответы [ 8 ]

2 голосов
/ 01 ноября 2019

Мы столкнулись с похожей проблемой с 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.

2 голосов
/ 30 октября 2019

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

Видимо, 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 пытается запросить веб-страницу до ее завершения.

1 голос
/ 13 ноября 2019

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

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

UPDATE : с проблема с chromedriver 3223

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

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

1 голос
/ 06 ноября 2019

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

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

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

1 голос
/ 29 октября 2019

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

   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);
0 голосов
/ 07 ноября 2019

Оказалось, проблема с Google Chrome, а не с chromedriver: https://bugs.chromium.org/p/chromedriver/issues/detail?id=3211

0 голосов
/ 30 октября 2019

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

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

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

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

1. implicit_wait=10
2. Sleep  10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...