setValue() / addValue() введите в адресную строку вместо выбранного элемента

Я использую WebdriverIO + devtools: кукловод + огурец + Firefox Nightly.

При использовании setValue() / addValue() первая буква моего ввода вводится в адресную строку вместо выбранного элемента. Проблема с теми же тестами не появляется в браузерах mse или chrome.

Проблема:

браузерскриншот

После этого ничего не происходит, пока не истечет время ожидания функции.

      INFO devtools: COMMAND navigateTo("https://google.com/")
INFO devtools: RESULT null
INFO devtools: COMMAND findElement("css selector", "input[type=text]")
INFO devtools: RESULT { 'element-6066-11e4-a52e-4f735466cecf': 'ELEMENT-1' }
INFO devtools: COMMAND elementClear("ELEMENT-1")
INFO devtools: RESULT null
INFO devtools: COMMAND elementSendKeys("ELEMENT-1", "hello world")

Примеры кода: Тест:

      Scenario: Try google
        When I open "google.com"
        Then I type "hello world" into "input[type=text]"

Шаги:

      When('I open {string}', async function (URL) {
    await browser.url(`https://${URL}`);
});

Then('I type {string} into {string}', async function (input, selector) {
    await $(selector).setValue(input);
});

Хотя для некоторых URL-адресов существует обходной путь с нажатием на элемент перед использованием setValue(), это не работает в некоторых случаях (например, при перенаправлении со страницы предварительного входа на страницу входа с предварительно введенным логином, я не мог нажать + setValue для поля пароля).

Надеюсь, кто-нибудь знает, как это можно решить или обойти для всех случаев. Спасибо.

[UPD]

@AnthumChris

поскольку я использую встроенный кукольник, страница по умолчанию не определена. Вместо этого я попробовал:

      const puppeteerBrowser = await browser.getPuppeteer()
const pages = await puppeteerBrowser.pages()
const page = await pages[0]
await (await page.waitForSelector('input[type=text]')).type('hello')

Он снова работал для chrome и mse, но не работал для ffox nightly.

После открытия в браузере запрошенного URL-адреса (google.com) я получил следующую ошибку:

      Error in "21: Then I type "hello world" into "input[type=text]""
TypeError [ERR_INVALID_URL]: Invalid URL: http://localhost:localhost:64619`

[UPD] Я изменил browserURL: 'http://localhost:${rdPort}' к browserURL: 'http://${rdPort}' в файле ...\node_modules\webdriverio\build\commands\browser\getPuppeteer.js, поэтому я, по крайней мере, мог подключиться к объекту puppeteer.pages, но все еще есть проблема с await (await page.waitForSelector('input[type=text]')).type('hello') действие:

      ProtocolError: Protocol error (DOM.resolveNode): Node with given id does not belong to the document resolveNode@chrome://remote/content/cdp/domains/content/DOM.jsm:245:15
execute@chrome://remote/content/cdp/domains/DomainCache.jsm:101:25
receiveMessage@chrome://remote/content/cdp/sessions/ContentProcessSession.jsm:84:45

1 ответ

Попробуйте дождаться <input>и введя прямо в него:

      await (await page.waitForSelector('input[type=text]')).type('hello')
Другие вопросы по тегам