Click на странице срабатывает только один раз.


(Helga Raider) #1

День добрый! Надеюсь на подсказку опытных автоматизаторов.
Используемые инструменты: selenium 2.35.0
В ходе теста необходимо кликать 4 кнопки, отвечающие за различный функционал. Проблема в следующем, все 4 кнопки webdriver находит, клик по одной из них приводит к ожидаемому результату, однако клик следующей кнопки результата не даёт. Т.е. драйвер ее видит, клик происходит, но вызова соответствующего функционала нет. Очередность кликов роли не играет, отрабатывает любая, если кликать ее первой.
Фрагмент собственно кода, вызывающего клик по элементу:

    public static void clickButton(DesktopKeyHolder button, boolean reportFlag) {
        WebElement element = Driver.getDriver().findElement(By.xpath("//input[@value='" + button + "']"));
        if (SetupKeyHolder.DRIVER.toString().equals("firefox")){
                element.click();
        }   else   element.sendKeys(Keys.ENTER);
        if (reportFlag) Reporter.log(MessagesFormatter.clickOnMsg(ReportKeyHolder.ELEMENT_BUTTON, button));
    }

Сразу оговорюсь, что опробован поиск элемента различными способами, по id вместо value, а так же непосредственно на странице с использованием аннотаций, как то

@FindBy(xpath = "//input[@id='forma___21']")
WebElement buttonApply; 

Тот же эффект, если вызывать клик при помощи javascript

JavascriptExecutor executor = (JavascriptExecutor)Driver.getDriver();
executor.executeScript("arguments[0].click();", element);
element.click();

и

Actions builder = new Actions(Driver.getDriver());
Actions hoverOverRegistrar = builder.moveToElement(element);
hoverOverRegistrar.perform();
element.click();

Проверено в трех различных браузерах IE 10.0.14, chrom 33.0.1750.154 m, firefox 28.0.0.5186.

Большое спасибо, даже за подсказку направления куда капать.)))


(Александр Таранков) #2

Ну так и какой результат-то? Что такое “однако клик следующей кнопки результата не даёт”?

  1. Не происходит ничего
  2. Вылетает Exception
  3. Что-то ещё

(Александр Таранков) #3

Пока выглядит как обычные гонки. Попробуй между кликами вставить паузу секунд на 5, чтоб проверить так ли это. А дальше уже действовать в зависимости от результатов этого эксперимента


(vmaximv) #4

Попробуйте все делать через Actions (без element.click())

builder.moveToElement(element).click().perform();
//or
builder.moveToElement(element,1,1).click().perform();
//or
builder.click(el).perform();

Если по прежнему будет одинаковое поведение и в ИЕ и в Хроме - то скорее всего в вашем приложении баг и ВД тут не причем.


(Helga Raider) #5

Вариант №1, не происходит ничего. Паузы в виде

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

тоже были опробованы.


(Helga Raider) #6

Тот же эффект. Отрабатывает только та кнопка, которую нажимаешь первой.


(vmaximv) #7

Тут такое дело - если использовать Actions, то в ИЕ и в Хроме работают принципиально разные механизмы эвентов. ИЕ работает непосредственно через эвенты ОСи (если конечно вы сами не включили синтетические), а Хром делает эмуляцию через js. Как вы сами понимаете, корреляции между ними нету практически никакой.

Поэтому можно сделать вывод, что проблема непосредственно в самом приложении. Например первый или последующие клики проходят “слишком быстро”, что и вызывает такое поведение AUT. И при должной сноровке это можно будет воспроизвести вручную.

@joemast вам предложил поставить sleep, как перед первым кликом, так и перед последующими, дабы исключить эту возможность.

Ведь под выражением “клик происходит” имеется ввиду, что анимация нажатия кнопки видна визуально?


(Александр Таранков) #8
  1. ещё бывает срабатывает, если кликнуть не один раз, а дважды (трижды)
  2. через Actions у меня обычно получалось в похожих странных ситуациях достичь результата
  3. ну и если ни так ни эдак, то надо с разработчиками собираться и думать - какие особенности у тестируемого приложения

(Alsu Vadimovna) #9

нужно определенно общаться с разработчиками, они подскажут
У меня была как-то ситуация, что действие по нажатию кнопки срабатывало только если сначала навести на нее. т.е. кнопка нажималась как и у вас, но действие не происходило.
Можно еще ставить паузы до нажатия кнопки и после, ожидать выполнения всех аякс запросов до и после нажатия.


(Helga Raider) #10

Паузы не помогают, такая примитивная проверка была опробована в первую очередь. Всем спасибо. Если будет найдено очевидное решение, отпишусь.


(Andrey Kim) #11

Советую обновить selenium 2.40 уже точно есть, может даже и поновее. Потом неплохо бы обновить и браузеры.

У меня была такая ситуация когда страница была буквально напичкана JS’ом.
ВД вроде как и кликает но ничего не происходит. Я решал это ожиданием отработки всех скриптов. Что-то вроде wait_for_ajax. Плюс обратите внимание на всевозможные сторонние подгружаемые скрипты. У меня иногда так бывает если на странице есть wysiwyg editor. ВД вроде как работает, но из-за загрузки скриптов ничего не происходит.


(Helga Raider) #12

Проблема ушла после обновления версии до 2.39.