Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

scroll на selenium web driver + java


(iczaur) #1

Добрый день еще раз!

 

Снова есть вопросы:) 

Есть элемент страницы  в которой расположенна таблица (пологаю что это фрэйм, но не факт). Где то в середине это таблицы есть элемент на который надо жмякнуть. Вопрос, как прокрутить таблицу (во фрэйме). чтобы найти это элемент. Пробовал

 

1. Попытаться получить координаты объекта:

((Locatable)webElement).getLocationOnScreenOnceScrolledIntoView();

Вызов метода getLocationOnScreenOnceScrolledIntoView() автоматически вызовет прокрутку страницы к элементу.

2. Проскроллить страницу к элементу с помощью Javascript:

((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();"
                                                              ,webElement);
 
вот такие конструкции но не получается.

Как я понимаю не получается потому что webElement представлен как   WebElement webElement = driver.findElement(By.xpath("//div[text() = 'Transaction Count per Minute']"));   И элемент не может быть найден так как он где то внизу

 

 

Спасибо


Selenium is slow down under IE8
(barancev) #2

Пока не покажете код -- ответить на вопрос нереально, можно только играть в угадайку.

Дайте ссылку на страницу Вашего приложения или аналогичную другую страницу, где есть такая же таблица, которая не хочет скроллироваться.


(Mykhailo Poliarush) #3

надо убедиться что это фрейм, откройте html и посмотрите

если это фрейм, то элемент просто не находиться, потому что нужно переключиться в нужный фрейм, а потом уже производить дейтвия

тем не менее, согласен, если покажите код, то тогда будет легче разобраться что и как у вас не работает


(iczaur) #4

Вот код

 

      @Test
            public void hibernate() throws InterruptedException, IOException {
 
                driver.findElement(By.xpath("//a[@id = 'WebUIwar(//localhost/argus)']"))
                        .click();
                driver.findElement(By.xpath("//nobr[text()='Hibernate Statistics']"))
                        .click();
                TimeUnit.SECONDS.sleep(2);
                driver.findElement(By.xpath("//nobr[text()='Argus']")).click();
                TimeUnit.SECONDS.sleep(2);
                driver.findElement(
                        By.xpath("//td[@class='tabTitle' and text()='Monitoring']"))
                        .click();
                driver.findElement(By.xpath("//td[@class='SubTabButton' and text() ='Schedules']")).click();
                TimeUnit.SECONDS.sleep(4);
                WebElement webElement = driver.findElement(By.xpath("//div[text() = 'Transaction Count per Minute']"));
          /*  ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();"
                    , webElement);
                        webElement.click();*/
                ((JavascriptExecutor) driver).executeScript(
                        "arguments[0].scrollIntoView(true);", webElement);
 
                     webElement.click();
 
 
На странице есть фрэйм, но я не уверен что это та табилица которая мне нужна
fireBug(ом) выделил таблицу. вот ее код
<div id="isc_RC" class="listGrid" onscroll="return isc_LocatableListGrid_4.$lh()" style="position: absolute; left: 0px; top: 47px; width: 1013px; height: 138px; z-index: 208892; padding: 0px; -moz-box-sizing: border-box; overflow: hidden; cursor: default;" role="list" eventproxy="isc_LocatableListGrid_4">
Далее идут вложенные дивы
 
Программа с которой работаю - RHQ (может кто пользовался)
 
Вот собственно весе упоминание о фрэйме которое смог найти
<iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>

</body>
</html>

 


(iczaur) #5

Есть ошибки в коде?


(Mykhailo Poliarush) #6

а где вы выполняете переключение в фрейм javascript?


(iczaur) #7

В коде нет переключения, я не знаю как его сделать.


(iczaur) #8

И нужен ли переход во фрэйм почему то мне кажется что таблица находится в div блоке

 


(Mykhailo Poliarush) #9

да это нужно делать, например вот так 

 

driver.switchTo().window("javasript");

 


(lokofc) #10

Скажите пожалуйста как  это работает(код) если в этой строчке

WebElement webElement = driver.findElement(By.xpath("//div[text() = 'Transaction Count per Minute']")); 

Уже осуществляется поиск недоступного элемента. Так его найти невозможно и по этому пути могу найти элемент только, если он находиться в поле зрения.


(ivan_ochc) #11

Добрый день. 

Возникла похожая проблема. На странице есть div-блок со скролбаром. Нужно кликнуть на элемент, который находится за пределами видимости (т.е. нужно прокрутить элементы на этом блоке вниз).

Все способы прокрутки скролят только основую страницу. Вопрос в том как переключится на этот блок и прокрутить его вниз?

Подойдет ли switchTo() для этого дела?

 

Сделал так:

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

for (int second = 0;; second++) {

            if(second >=60){
                break;
            }
           actions.sendKeys(Keys.ARROW_DOWN).perform();
           try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
 

 

 


(Taras) #12

если скрол селениума не работает значит наверное скрол переопределенний девами - подойдите к девам и пусть дадут Вам  JS которим делаеться скрол -  driver.execute script и поехали - я все такие вещи как свайпи скроли итд всегда так делаю


(Ramon Menezes) #13

помогите пожалуста с таким вопросом, java + webdriver, мне нужно определить появляется ли горионтальная полоса прокрутки при увеличении зума браузера, с зумом разобрался, а вот как споймать скрол не могу догнать, покрутить его просто
jsx.execueScript(“window.scrollBy(50,0)”, “”);
детект самого скрола никак не получается,
буду признателен за помощ)


(Дмитрий Маковский) #14

Я решал эту проблему через обращение к javascrit в итоге у меня получилось следующее
public void scrollDown(String xpath) {
WebElement element = driver.findElement(By.xpath(xpath));
((JavascriptExecutor)driver).executeScript(“arguments[0].scrollIntoView();”
,element);

}

Ну потом я просто вызываю в тех местах где мне надо проскролить
wrapper.scrollDown(FOWRWARD_BTN_XPATH);