Можлива проблема із Chromedriver 78, Selenium не може знайти веб-елемент PDF, відкритий у Chrome


17

Поки мій Google Chrome не був оновлений до версії 78, мій код справно працював. Я також оновив Chromeedriver до версії 78.0.3904.70. Тому я вже не в змозі знайти WebElement з id = 'плагін' за допомогою 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 буде виправлено. Отже, я використовував Chromeedriver (версія 78), і у моєму файлі .pom є така залежність: <залежність> <групаpId> org.seleniumhq.selenium </groupId> <artifactId> селен-хром-драйвер </artifactId> <версія> 3.141.59 </version> </dependency>
Змішайте

У мене те саме питання. Код, який працював раніше, зараз не працює, оскільки веб-драйвер не може знайти той веб-елемент, який я намагаюся знайти. Неявне і явне очікування виходить з ладу однаковим. Що я не зміг точно визначити - це тип елементів, з якими виникають проблеми, або якщо це просто компоненти, розташовані всередині рамки кадрів. Як вирішення, я додаю Thread.sleepв місцях, де я мав неявні чи явні очікування перед цим оновленням.
hfontanez

Для мене працює Chrome 78 з хромодаром 77.
Yun

Відповіді:


5

Я зіткнувся з тим же питанням.

Мабуть, Chrome автоматично оновлює себе. Вчора (29 жовтня 1919 р.) Мій 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.
Мікс

Я відкрив нове видання про групу Chromeedriver
мікс

Ви можете використовувати Chromium для тестів, це основна версія Chrome без служб Google, він не оновлюватиметься, і він прекрасно працює з Chromedriver: chromium.org/getting-involved/download-chromium
Blaise

3

Ми зіткнулися з подібною проблемою із Chrome 78.0.3904.7, Chromedriver 77/78, Python Selenium 3.141.0.

У наших автоматизованих тестах Python Selenium ми бачили чимало збоїв, коли, здається, що кліків на елементи не відбулося. Навіть дивно, здається, що елемент став активним (як би його збирається натиснути), але фактична подія натискання ніколи не відбулася. Як результат, перемикання сторінок тощо не трапляються, що призводить до різних збоїв у потоці.

Процесом сліду та помилок ми з’ясували, що використання стандартної .click () функції тепер не є надійним:

webdriver_element.click()

Але використання Action Chains видається надійним:

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! Дякую за вашу відповідь Однак це не вирішує мою проблему. Проблема полягає в тому, що Chromeedriver (версія 78) не може знайти жодного веб-елемента у вбудованому PDF-файлі. Ця функціональність працювала чудово, поки Google Chrome не був оновлений до версії 78. PS Я НЕ запускаю свої тести в режимі без голови
Mix

Не ясно, як ці варіанти вирішують питання ОП.
Cal Corbin

Це не вирішує проблему. Швидше за все, ви запускаєте сценарії, коли веб-елемент не розташований всередині iframe.
hfontanez

1

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

Ось питання, яке я порушив:

Проблема з використанням локаторів Chromeedriver 78.0.3904.70


1

Я вчора підтвердив, що ця проблема виявляється лише тоді, коли елемент міститься в iframe. У цих випадках рамка розміщена добре. Однак спроба знайти веб-елемент за допомогою об'єктів очікування драйвера або веб-драйвера призведе до NoSuchElementабо TimeoutExceptionвідповідно.

Я надав команді Chromeedriver детальний журнал драйверів для хромування, і вони працюють над цим.

ОНОВЛЕННЯ : З хромированого випуску 3223

Журнали показують, що остаточне виконанняContextCreate для кадру не завершується, поки після того, як FindElement поверне нуль. Починаючи з версії 77, ChromeDriver перестав чекати завантаження всіх кадрів, перш ніж продовжувати навігацію. На жаль, ця зміна завадила чекати завантаження поточного кадру. 3164 всі очікують завантаження поточного кадру; це повинно запобігти пошуку FindElement до тих пір, поки кадр не припиниться, і не буде створено ExecuContext.

В основному, ця помилка була введена в v.77. Багато хто з нас просто помітили цю проблему, оскільки ми перейшли з версії.77 до .v78. Слово полягає в тому, що вони націлені на виправлення для .v80 (не v. 79). Як вирішення, я використовую Thread.sleepчас, коли я перемикаюсь на кадр iframe та коли я намагаюся знайти компонент. Цей спосіб працює чудово. Насправді ви можете перевірити це самостійно, просто запустивши програму в режимі DEBUG. Призупинивши виконання (використовуючи точку перерви), ви помітите, що ваш оригінальний код (без сну) працює нормально.


0

Наприклад: Ви можете спробувати використовувати ці ключові слова !.

1. implicit_wait=10
2. Sleep  10

Привіт @Narasimhamurthy GN, дякую за відповідь. Явне очікування не є проблемою, я використовую явне очікування протягом усіх моїх тестів, і я не стикаюся з подібною проблемою. Проблема полягає в тому, що Chromeedriver (версія 78) не може знайти жодного веб-елемента у вбудованому PDF-файлі.
Мікс

Для мене в деяких тестових випадках я також зіткнувся з тією ж проблемою, що я використав "geckodriver" (Firefox).
Narasimhamurthy GN

в іншому випадку використовуйте різні ключові слова локатора селену, щоб знайти WebElement.
Narasimhamurthy GN

На жаль, рекомендується, щоб користувачі нашого веб-додатку користувалися Chrome або Internet Explorer, Firefox чомусь не рекомендується. Ось чому я не можу використовувати Firefox для автоматизації тестів. Я намагався використовувати всі можливі способи знайти будь-який веб-елемент на pdf за допомогою селену, але це не працює. Я також спробував використовувати різні залежні та хромодруги, і нічого не працює.
Мікс


0

У мене було те саме питання.

Після автоматичного оновлення Chrome версією 78.0 мої автоматизовані тестові сценарії вийшли з ладу. Тому я оновив Chromeedriver до версії 78, але драйвер все ще не зміг знайти жодного веб-елемента. Після цього я спробував декілька версій Chromeedriver, і нарешті мою проблему вирішено хромодервером версії 2.44 .

Цю версію можна знайти на веб-сторінці https://chromedriver.storage.googleapis.com/index.html?path=2.44/


-1

Ви можете NuGet менеджер пакетів, видалити Chrome диск і пошук хрому, скачати нову версію selenium.web.driver.ChromeDriver >> для jsaKamoto

там ви знайдете хромовану версію 78.


Дякую за відповідь, але це насправді не відповідає проблемі виключень NoSuchElement у хромованій версії 78.
wdtj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.