Транспортир - ScrollDown в диалоговом контейнере для щелчка в элементе - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь взаимодействовать с некоторыми скрытыми элементами с помощью транспортира в контейнере диалога ( Изображение контейнера диалога ), поэтому я попробовал так много вариантов, но у меня ничего не получилось. (тесты в chrome)

Моя настройка: I / status - доступна автономная версия селена: 3.141.59 [последняя]

I / status - доступны версии chromedriver : 2.46, 77.0.3865.10, 80.0.3987.16 [последний]

I / status - доступна версия geckodriver: v0.26.0 [последний]

I / status - IEDriverServer отсутствует

I / status - android -sdk отсутствует

I / status - appium отсутствует

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

    placeSistema = element(by.css('element(by.css('[placeholder = "Sistema"]'))

    this.clicaCampoSistema = async function () {
        await browser.actions().sendKeys(protractor.Key.PAGE_DOWN).perform();
        await placeSistem.click();
    }

Ошибка: sendKeysToActiveElement

2-я попытка использовать mouseMove для нажатия на скрытый элемент:

        placeSistema = element(by.css('element(by.css('[placeholder = "Sistema"]'))

        this.clicaCampoSistema = async function () {
        await browser.actions().mouseMove(placeSistema).click().perform();

    }

Ошибка: Timeout - Asyn c обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL.

У кого-нибудь есть совет? Огромное спасибо !!!

  • РЕШЕНИЕ: С помощью сообщества я использовал этот блок кода для решения моего вопроса

await browser.executeScript("arguments[0].click()", placeSistema);

Это сработало очень хорошо!

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Вы пытались использовать scrollIntoView с executeScript? Это должно прокрутить этот элемент в область просмотра

placeSistema = element(by.css('element(by.css('[placeholder = "Sistema"]'))

this.clicaCampoSistema = async function () {
    await browser.executeScript('arguments[0].scrollIntoView(true)', placeSistema.getWebElement());
    await placeSistem.click();
}
0 голосов
/ 16 апреля 2020

Попробуйте следующий скрипт:

   placeSistema = element(by.css('element(by.css('[placeholder = "Sistema"]'))
   browser.executeScript(() => {
   placeSistema .scrollIntoView();
   }, el.getWebElement());
   placeSistema.click()
0 голосов
/ 15 апреля 2020

По умолчанию транспортир прокручивает элемент в видимость. Использование element.click () приведет к:

  1. Найдите элемент
  2. Прокрутите до него и переместите курсор в центр элемента
  3. Выполните щелчок

Пока элемент находится в DOM, транспортир сможет находить их, и пока есть полоса прокрутки, транспортир будет знать, как ее использовать.

Если обычный элемент .click () не работает, вы можете попробовать использовать browser.actions ()

await browser.actions().mouseMove(elem).perform();
await browser.sleep(1000); // Shouldn't be necessary, but it might help
await browser.actions().click().perform();

или просто

await browser.actions().mouseMove(elem).click().perform();

У меня раньше были проблемы с объединением двух команд, вызванные анимации, поэтому я предпочитаю разбивать его на 2 разные команды.

Если ничего из этого не работает, вы можете попробовать отключить w3 c в возможностях, поскольку текущий Action Api, который использует транспортир, не поддерживается в Selenium-webdriver 4.0 и Protractor 6.0.0, и в текущих версиях chromedriver все еще есть ошибки с ним.

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