WebdriverIO не может получить значение для ввода? - PullRequest
0 голосов
/ 24 августа 2018

Я автоматизирую тесты для веб-приложения только для сафари .... Но у меня проблемы с этим.Кажется, webdriverIO работает не очень хорошо с сафари.Моя среда: wdio: v4.13.1 узел: v10.8.0

Я пытаюсь получить значение поля ввода

const value = browser.getValue('input.xxxxxxxxx')

, но я получил исключение

The command 'GET /session/E5218F3F-7FE1-43D5-A231-A4B8CCB2C599/element/node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6/property/value' was not found.
running safari
Error: The command 'GET /session/E5218F3F-7FE1-43D5-A231-A4B8CCB2C599/element/node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6/property/value' was not found.
at elementIdProperty("node-807A67A6-E0E8-4AD7-A505-9ED62ECD6FE6", "value") - getValue.js:35:54

Тем не менее, это работает отлично, если я использую Chrome.Я также попробовал более хитрый способ, например

const value = browser.execute("document.querySelector('input.xxxxxxxx')")
console.log(value)
// gives me this
{ sessionId: '40DD4190-CB6D-4188-962F-9059D96C0441',
value: null,
_status: 0 }

Не могу найти обходной путь для этого.Кто-нибудь может помочь с этим?

Я также считаю, что щелчок также не работает для сафари.Он будет жаловаться, что элемент не виден, но элемент явно виден там.Мой обходной путь для этого

browser.execute("document.querySelector('.popup-menu-items li).click()") 

В Chrome мне не нужно делать этот грязный обходной путь.Тестирование в сафари с webdriverIO действительно болезненно.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я потратил слишком много времени на изучение этого вопроса вчера, потому что у меня возникла та же ошибка при запуске в Safari с wdio v4.13.2

Сообщение об ошибке совершенно правильное, команды нет:

GET /session/:sessionId/element/:id/property/:name

Что мы на самом деле хотим сделать, так это:

GET /session/:sessionId/element/:id/attribute/:name

Я нашел список документов, в которых можно было бы сделать звонки здесь

Если вы посмотритев функции getValue в webdriverio она вызывает собственную функцию с именем elementIdProperty, которая выполняет запрос к URL wd/hub/session/"sessionId"/element/"elementId"/property/value, указанному выше.Однако в функции есть условный оператор, который говорит, что если это неизвестная команда, она должна вызвать другую функцию с именем elementIdAttribute, которая отправляет запрос на правильный URL-адрес, заканчивающийся /attribute/value.Я предполагаю, что когда вы запускаете его в Chrome, он распознает ответ неизвестной команды, а когда вы запускаете его в Safari - нет.Когда я пытался делать запросы вручную в браузере, ответы выглядели иначе.Все это очень расстраивало, чтобы выяснить это и трудно устранить.

Мой обходной путь - просто использовать функцию getAttribute непосредственно из webdriverio, например:

const value = browser.getAttribute(selector, 'value');

Тогда мы можем увидетьесли они исправят это в более поздней версии webdriverio.

0 голосов
/ 30 августа 2018

Это похоже на проблему с селеном, а не с webdriverio.

Быстрый поиск в Google дал мне эту официальную страницу настройки: https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari

Если это не сработает, я считаю, что вам следует больше исследовать селеновую сторону.

...