#javascript #selenium #svg #electron #selenium-chromedriver
#javascript #selenium #svg #electron #selenium-chromedriver
Вопрос:
Я пытаюсь автоматизировать управление элементом изображения «svg», внутри которого есть 12 выбираемых частей (с тегом «path»).
Во всех моих приложениях electron-angular мне приходится использовать действия js с Selenium, чтобы нажимать на кнопки или другие элементы пользовательского интерфейса. Функция щелчка Selenium или класс действий не работают у меня в этом приложении.
Итак, когда я пытаюсь щелкнуть по одному из элементов «svg»:
IWebElement patientIllustration = electron.driver.FindElement(By.Id("patientIllustration"));
IWebElement shadow = (IWebElement)jse.ExecuteScript("return arguments[0].shadowRoot", patientIllustration);
IWebElement body = shadow.FindElement(By.Id("adult_vascular"));
IReadOnlyCollection<IWebElement> parts = body.FindElements(By.TagName("path"));
IWebElement bodyPart = parts.ElementAt(0);
jse.ExecuteScript("arguments[0].scrollIntoView(true);", bodyPart);
jse.ExecuteScript("arguments[0].click();", bodyPart);
Я получаю следующую ошибку:
openQA.Selenium.WebDriverException: ‘неизвестная ошибка: аргументы [0].щелчок не является функцией (информация о сеансе: оболочка содержимого =) (Информация о драйвере: chromedriver=2.36 (7361dbe5ac927be4276ec7da1d3548c4f22343a0), платформа = Windows NT 10.0.14393 x86_64)’
Я также пробовал нажимать на элемент BodyPart с помощью метода Click () и класса Actions. Но это ничего не делает. Эти две возможности не работают ни для одного элемента в моем приложении.
У кого-нибудь есть какая-нибудь другая идея попробовать?
Ответ №1:
Вместо этого
jse.ExecuteScript("arguments[0].scrollIntoView()", bodyPart);
можете ли вы попробовать это.
jse.ExecuteScript("arguments[0].scrollIntoView(true);", bodyPart);
Комментарии:
1. ОК. Извините за это, я изменил это, но исключение остается. Кроме того, я заметил, что у элемента BodyPart свойства «Отображается» и «Включено» имеют значение true.
Ответ №2:
Это сообщение об ошибке…
OpenQA.Selenium.WebDriverException: 'unknown error: arguments[0].click is not a function
(Session info: content shell=)
(Driver info: chromedriver=2.36
(7361dbe5ac927be4276ec7da1d3548c4f22343a0),platform=Windows NT 10.0.14393 x86_64)
…подразумевает, что ChromeDriver не смог установить связь с веб-браузером, то есть с сеансом браузера Chrome.
Ваша основная проблема заключается в несовместимости между версиями двоичных файлов, которые вы используете следующим образом:
- Вы используете chromedriver=2.36
- В примечаниях к выпуску chromedriver= 2.36 четко упоминается следующее :
Поддерживает Chrome v63-65
- Возможно, вы используете последнюю версию браузера Chrome, т.е. chrome = 73.0
- В примечаниях к выпуску ChromeDriver версии 73.0.3683.68 четко упоминается следующее :
Поддерживает Chrome версии 73
Таким образом, существует явное несоответствие между ChromeDriver версии v2.36 и браузером Chrome версии 73.0
Решение
- Обновите ChromeDriver до текущего уровня ChromeDriver 73.0.3683.68.
- Обновите версию Chrome между уровнями Chrome v73. (согласно примечаниям к выпуску ChromeDriver 73.0.3683.68)
- Если ваша базовая версия веб-клиента слишком старая, удалите ее и установите последнюю стандартную и выпущенную версию веб-клиента.
- Выполните свой
@Test
.
Комментарии:
1. Мое тестируемое приложение построено с использованием electron 2.0.3. Итак, я загружаю chromedriver с github.com/electron/electron/releases . Поэтому я не думаю, что есть несовместимости, потому что другие кнопки работают с действием щелчка js (действия Selenium бесполезны в моем приложении, тоже не знаю почему)… просто элемент svg parts (внутри теневого тега) вызывает исключение