Перейти к содержимому

Фотография

Selenium + Thucydides + Java: драйвер не видит "скрытые" элеме


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 Lace

Lace

    Новый участник

  • Members
  • Pip
  • 48 сообщений

Отправлено 09 октября 2013 - 13:10

Неожиданно столкнулась с проблемой. Selenium перестал видеть элемент, если он находится за границей экрана.
Суть: на нажатие кнопки открывается список с названиями банков, после клика на банк открывается список с его филиалами. Список большой, более 40 наименований. Соответственно показывается список с прокруткой экрана.
В ходе теста я получаю xpath, абсолютно валидный (проверено неоднократно). Если попробовать кликнуть по этому xpath вручную, то выбранный банк прекрасно находится (даже если он за границей видимости экрана) и открывается. Почему это не происходит в тесте - не понимаю. Ранее Selenium такие варианты прекрасно обрабатывал. Попробовала выставить ожидание элемента (мало ли, он не успевает подгрузиться) - не помогло.

Код:
List<WebElement> bankList = getDriver().findElements(By.xpath("//*[@id='bank']/li"));

        int bankCount = bankList.size();
        int randomChose = new Random().nextInt(bankCount)+1;
        System.out.println("Chosen bank ["+randomChose+"]");
        for(int i = 0; i < 20; i++){
            waitABit(500);
            if (element(bankList.get(randomChose)).isVisible()) i = 20;
        }
            getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/span")).click();
        List<WebElement> filialList = getDriver().findElements(By.xpath("//*[@id='bank']/li[" + randomChose + "]/ul/li"));
            int filialCount = filialList.size();
            int randomFilial = new Random().nextInt(filialCount)+1;
        for(int i = 0; i < 10; i++){
            waitABit(500);
            if (element(filialList.get(randomFilial)).isVisible()) i = 10;
        }
            getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/ul/li["+randomFilial+"]")).click();

    }

Трейс сообщения об ошибке:
Скрытый текст

  • 0

#2 Rara

Rara

    Активный участник

  • Members
  • PipPip
  • 83 сообщений
  • ФИО:Кондрашов Юрий Алексеевич
  • Город:Минск, Беларусь


Отправлено 10 октября 2013 - 13:08

Видимо в новой версии Selenium поменялся алгоритм определения видимости элемента.

Попробуйте делать клик с использованием JavaScript:

WebElement element = getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/span"));
getDriver().executeScript("arguments[0].click();", element);

  • 1
Я бы переписал жизнь, но Бог не дает мне исходники

#3 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 10 октября 2013 - 13:52

Или добавьте перед кликом прокрутку до этого элемента, раз оно автоматом не крутит до него.
  • 0

#4 Lace

Lace

    Новый участник

  • Members
  • Pip
  • 48 сообщений

Отправлено 11 октября 2013 - 07:39

Или добавьте перед кликом прокрутку до этого элемента, раз оно автоматом не крутит до него.


Прокрутку добавляла, но там похоже что-то разработчики "накрутили" с окнами, потому что тест считает, что там нечего прокручивать...
  • 0

#5 Lace

Lace

    Новый участник

  • Members
  • Pip
  • 48 сообщений

Отправлено 11 октября 2013 - 10:15

Видимо в новой версии Selenium поменялся алгоритм определения видимости элемента.

Попробуйте делать клик с использованием JavaScript:

WebElement element = getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/span"));
getDriver().executeScript("arguments[0].click();", element);


Спасибо!!! Добавила клик с использованием JavaScript и все заработало!
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных