Как прокручивать изображение при работе с «внутренней» полосой прокрутки - PullRequest
0 голосов
/ 25 октября 2018

Прошу прощения, если этот вопрос несколько двусмысленный.Я заметил, что элементы Geb не будут прокручиваться в поле зрения, если указанный элемент находится за пределами страницы и должен быть прокручен с использованием "внутренней" полосы прокрутки

с помощью "внутренней" полосы прокрутки, на которую я ссылаюсьполосы прокрутки, которые вложены в данную веб-страницу и отделены от полосы прокрутки глобальной веб-страницы.

Когда я пытаюсь получить элемент, находящийся за пределами страницы из-за этой внутренней полосы прокрутки, geb возвращает нулевой объект (gebне удалось найти элемент на странице)

Я сделал несколько различных хаков, которые вручную прокручивали эти внутренние полосы прокрутки, но мне было интересно, предоставил ли Geb какую-либо функциональность для обработки этих вложенных полос прокрутки.

Вот фрагмент кода, показывающий, как я обрабатываю поиск данной строки:

class TabledModule extends Module {
    static content = {
        headers {$(By.xpath("//lane-group-header"))}
        table {$(By.xpath("//div[@class=',y-class']"))}
    }

    Navigator getAllRows(){
        return table.children()
    }

    Navigator getRow(String text){
        return table.children().find{it.text().contains(text)}
    }

    Navigator getRow(int index){
        return table.children()[index]
    }
}

из моего сценария:

getAllRows() //returns 50 which it should (only 20 are displayed)
def row = getRow(45) //returns a navigator as it should
row.click() //successfully clicks the correct row
def row2 = getRow("someString") //returns null when the row is off the page this is the problem and I'm wondering now if it is a bug, since getting the row by index seems to work fine.

Для этого модуля только около 20 из 50 строкпоказано, чтобы показать другие строки, вам нужно прокрутить вложенную полосу прокрутки, чтобы добраться до них.строка, к которой я хочу получить доступ, находится ниже в списке, поэтому для ее доступа требуется прокрутка.

Интересно то, что getAllRows().size() возвращает правильное количество строк: 50, но когда я вызываю getRow длястрока, находящаяся вне страницы, возвращает ноль.Если та же строка находится в верхней части списка, это работает.он только возвращает ноль, если его нужно прокрутить до.

1 Ответ

0 голосов
/ 30 октября 2018

Итак, я узнал, в чём была моя проблема.Если я возьму элемент с экрана с индексом вместо строки.Geb может захватить навигатор и нажать на него, но если элемент находится за пределами экрана, GEB не может получить текст на элементе.чтобы исправить это я реализовал этот метод.

Navigator getRow(String text){
    JavascriptExecutor jse = (JavascriptExecutor)browser.driver
    for(int x = 0; x<getAllRows().size();x++){
        def row = getRow(x)
        WebElement element = row.firstElement()
        jse.executeScript("arguments[0].scrollIntoView(true);", element);
        if(row.text().contains(text)){
            return row
        }
    }
    return null
}
...