Есть ли в транспортире решение для прокрутки следующих заполненных элементов? - PullRequest
0 голосов
/ 12 января 2020

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

Ответы [ 3 ]

0 голосов
/ 12 января 2020

Вы пробовали с .getLocation()?

API-интерфейс Protractor : "Запланирует команду для вычисления местоположения этого элемента в пространстве страницы. Обещание, которое будет преобразовано в местоположение элемента как объект {x:number, y:number}. "

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

const input = element(by.id('yourId'));

GetLocationAndScroll = async (element) => {
    let {x, y} = await element.getLocation();
    return await browser.executeScript(`window.scrollTo(${x},${y});`);
};

GetLocationAndScroll(input);

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

0 голосов
/ 13 января 2020

Если в этом вопросе мне чего-то не хватает, я думаю, простой .scrollIntoView - лучший вариант для вас. Вы можете реализовать следующие два способа:

Опция 1: Создать функцию

async function sendKeysWithScroll(requiredEle, value){
    await browser.executeScript("arguments[0].scrollIntoView();", requiredEle.getWebElement());
    await requiredEle.sendKeys(value);    
}

const nameField = element(by.css('#name'));
await sendKeysWithScroll(nameField, "DublnDev");

Опция 2: Изменить прототип ElementFinder

конф. js

onPrepare: function () {

    //Add new prototype which scrolls into view before entering text
    require("protractor").ElementFinder.prototype.sendKeysWithScroll = async function (value) {
        await browser.executeScript("arguments[0].scrollIntoView();", this.getWebElement());
        await this.sendKeys(value);
    }
}

spe c. js

const nameField = element(by.css('#name'));
await nameField.sendKeysWithScroll("DublinDev");
0 голосов
/ 12 января 2020
browser.executeScript('let element = document.getElementById("<element>"); element.scrollIntoView();).then(function() { element(by.<<here your button locator>>).click(); })

Это должно решить проблему.

...