Как прокрутить, пока объект не появится во всплывающем окне? - PullRequest
0 голосов
/ 20 мая 2019

Как прокрутить, пока объект не появится во всплывающем окне?

Selenium 3.141 с Java

  1. Открыть всплывающее окно из базового окна
  2. Переключиться во всплывающее окно
  3. Теперь прокрутите вниз, пока какой-нибудь объект не появится во всплывающем окне (во всплывающем окне доступен скроллер окна) и нажмите

Ожидаемый результат: прокрутка должна происходить до тех пор, пока объект не станет видимым, и нажать

Фактический результат: переключается во всплывающее окно, но не прокручивается

WebElement Element =  driver.findElement(By.xpath("//*[contains(@search-item-predicate-value,'test_object')]"));
jse.executeScript("arguments[0].scrollIntoView();", Element);

jse.executeScript("arguments[0].scrollTop = arguments[1];",driver.findElement(By.className("wux-scroller")), 500); //scrollTop works but scrollIntoView fails```

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Здесь вы сказали, что переключаетесь на всплывающее окно. то есть это не полоса прокрутки драйвера. Это полоса прокрутки уровня приложения. Следовательно, когда вы используете javascriptexecutor, он не будет прокручивать ваше всплывающее окно.

Чтобы устранить эту проблему, выполните следующие действия: 1) Переключиться во всплывающее окно 2) Нажмите на любой элемент, чтобы активировать DOM 3) Напишите также xpath для вашего DOM 4) Используйте приведенный ниже код для прокрутки в зависимости от ваших требований:

public static boolean scrollWebTable(String dom, String toSearch, String direction) {
        driver.findElement(By.xpath(dom)).click();
        int flag = 0;
        int count = 0;
        do {
            try {
                driver.findElement(By.xpath(dom)).click();
                WebElement ele = Shared.driver.findElement(By.xpath(toSearch));
                flag = 1;
            } catch (Throwable e) {
                switch (direction.toLowerCase()) {
                case "right":
                    driver.findElement(By.xpath(dom)).sendKeys(Keys.RIGHT);
                    break;
                case "left":
                    driver.findElement(By.xpath(dom)).sendKeys(Keys.LEFT);
                    break;
                case "down":
                default:
                    driver.findElement(By.xpath(dom)).sendKeys(Keys.PAGE_DOWN);
                    break;
                case "up":
                    driver.findElement(By.xpath(dom)).sendKeys(Keys.PAGE_UP);
                    break;
                }
            }
        } while ((flag == 0) || ((++count) == 250));
        return (flag == 1);
    }

вызовите этот метод из вашего класса POM, передавая DOM и elementToSearch xpath и в каком направлении вы хотите прокрутить UP, DOWN, RIGHT или LEFT. Здесь, пока будет выполняться цикл (т.е. он будет прокручивать) страницу, пока не отобразится ожидаемый элемент.

Примечание: этот код будет работать только тогда, когда ваше всплывающее окно будет прокручиваться, когда на клавиатуре находятся клавиши со стрелками.

0 голосов
/ 21 мая 2019

Иногда элемент не загружается, пока не закончится прокрутка. (Динамическая загрузка содержимого после действия прокрутки ...) Просмотрите исходный код, чтобы убедиться, что элемент действительно находится перед прокруткой. Если нет, сначала нужно прокрутить окно по пикселям.

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