Подтвердить что ты не робот

Транспортир: прокрутите вниз

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

UnknownError: неизвестная ошибка: элемент не кликается в точке (94, 188).

Я попытался использовать:

browser.executeScript('window.scrollTo(0,document.body.scrollHeight)');

который работал, когда я тестировал его в protractors elementexplorer.js, но в моих обычных тестах он ничего не делает. Любой другой путь вокруг этого?

4b9b3361

Ответ 1

вам нужно подождать, пока обещание будет разрешено. следующий пример приведен из открытой проблемы

browser.executeScript('window.scrollTo(0,0);').then(function () {
    page.saveButton.click();
})

Ответ 2

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

    browser.actions().mouseMove(element).perform();

После этого браузер будет фокусировать элемент.

Ответ 3

Я хотел бы добавить к предыдущему ответу и, надеюсь, дать немного больше объяснений.

Этот код в вызове 'executeScript':

'window.scrollTo(0,0);'
  • Прокручивает окно UP, в координаты окна 0,0... по существу до самого верхнего уровня
  • Если вам известна конкретная область, к которой нужно перейти, просто измените координаты.

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

browser.executeScript('window.scrollTo(0,10000);').then(function () {
    expect(<some control>.<some state>).toBe(<some outcome>);
})

Ответ 4

В случае, если у кого-либо есть проблемы, как я:

Я пытался прокрутить страницу до конца, чтобы загрузить мой следующий набор данных в бесконечном сценарии прокрутки. Я пробовал разные варианты window.scrollTo, а также аргументы [0].click() без успеха.

Наконец, я понял, что для прокрутки страницы мне нужно было сфокусироваться на "окне", щелкнув любой элемент внутри окна. Тогда window.scrollTo(0, document.body.scrollHeight) работал понравилось очарование!

пример кода:

element(by.className('<any element on page>')).click();
browser.executeScript('window.scrollTo(0,document.body.scrollHeight)').then(function(){
//whatever you need to check for here
});

Ответ 5

Я обнаружил, что создание помощника утилиты и использование его внутри объектов страницы (или самих тестовых файлов). Кажется, это хорошо работает для меня:

utils.js

module.exports = {
  scrollIntoView: function(el) {
    browser.executeScript(function(el) {
      el.scrollIntoView();
    }, el.getWebElement());
  }
}

внутри объекта страницы где-то...

var scrollIntoView = require('../utils').scrollIntoView;

module.exports = {
  clickBackBtn: function() {
    var el = element(by.buttonText('Go back'));
    scrollIntoView(el);
    el.click();
    return;
  }
}

в самом тесте...

it('should allow the user to go back to the profile page', function() {
  PageObject.clickBackBtn();
  expect(browser.getCurrentUrl()).toContain('/user/profile');
});

Ответ 6

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

browser.actions().mouseMove(element).perform();

Ответ 7

Другой способ: вы можете попробовать следующее:

this.setScrollPage = function (element) {

    function execScroll() {
        return browser.executeScript('arguments[0].scrollIntoView()',
            element.getWebElement())
    }

    browser.wait(execScroll, 5000);

};

Ответ 8

используя executeScript, мои тесты нестабильны, поэтому я теперь использую browser.actions(). mouseMove (element).perform(); как предложено @Kimxinfo