Selenium.click не работает с некоторыми элементами привязки - PullRequest
6 голосов
/ 26 мая 2011

Приложение, над которым я работаю, было недавно обновлено, и как часть этого был представлен новый календарь JQuery.Мне нужно нажать на ссылку в календаре, чтобы выбрать время и дату.Тем не менее, Selenium.click не работает.Команда выполняется, но на экране ничего не происходит.

Чтобы проверить правильность моего локатора XPATH / CSS (я пробовал оба), я добавил команды selenium.getText (locator) и selenium.highlight (locator).Оба работали!Нет проблем в этом.Это ТОЛЬКО щелчок, который не работает.

При регистрации в firebug я мог видеть, что div, на котором я пытаюсь щелкнуть, находится в неактивном состоянии.Значит ли это, что элемент отключен?Смотрите на скриншот Firebug ниже.

Я также пытался запустить ту же команду в Selenium IDE.В IDE это работает «иногда».

Я запускаю этот тест с использованием Selenium 1.xx.

ОБНОВЛЕНИЕ:

Я сделал еще одну вещь в рамках отладки.Во время пробного запуска я открыл IDE Selenium в браузере, чтобы он записывал, какие действия происходят.IDE записал все действия до этого клика.Но я ничего не видел в IDE, когда была выполнена команда click.Любая идея, ребята, что может быть причиной?

Кто-нибудь сталкивался с подобной проблемой раньше?Любая помощь будет оценена !!! Firebug screenshot

Ответы [ 6 ]

2 голосов
/ 26 мая 2011

Попробуйте selenium.fireEvent(locater, 'click') или используйте Selenium 2, который более тесно интегрирован с браузером.

Возможно, у вас та же проблема, что и у некоторых людей, например.

Селеновые щелчки не работают с GWT

Использование Selenium для «нажатия» на не входных или неуправляемых элементах

Похоже, что это связано с событиями кликов, которые добавляются с помощью Javascript.

Отредактировано

Я не знаю, используете ли вы ту же реализацию календаря, но я обнаружил, что jQuery fullcalendar.js заменяет событие mouseover, и вам нужно сначала его запустить. Я получил его на работу, используя

selenium.runScript("jQuery(\"a:contains('" + NEW_EVENT_NAME
        + "')\").trigger('mouseover');jQuery(\"a:contains('"
        + NEW_EVENT_NAME + "')\").trigger('click')");
0 голосов
/ 30 июля 2014

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

В моем случае я смог решить проблему по совершенно неясным для меня причинам с помощью Selenium WebDriver Actions (задокументировано здесь для Java и здесь для Ruby) выполнить действие clickAndHold / click_and_hold с последующим действием освобождения.В Ruby это делается следующим образом (пример кода из документации к выпуску Ruby):

el = driver.find_element(:id, "some_id")
driver.action.click_and_hold(el).release.perform

Надеясь, что это поможет кому-то еще, и, возможно, кто-то с большим пониманием может объяснить причины этого.

0 голосов
/ 23 июля 2012

Я недавно сталкивался с подобной проблемой. Обратите внимание, я работаю с драйвером Selenium. Поэтому я не уверен, подходит ли мой подход для Selenium 1.xx

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

WebElement mnuElement;
WebElement submnuElement;
mnEle = driver.findElement(By.Id("mnEle")).Click();
sbEle = driver.findElement(By.Id("sbEle")).Click();

Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.MoveToElement(mnEle).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
driver.findElement(By.Id("sbEle")).Click();

Вот ссылка

Основная идея - создать экземпляр Actions и попытаться сфокусироваться на вашем элементе и щелкнуть по нему. Я бы поступил следующим образом: // находим xpath вашего невидимого элемента:

    String xpathInvisible = "//*[id="calendar"]/div/div/div/div[1]";

//find xpath of the element, on hovering which your invisible (inactive) element appear. I mean somthing //like VDIs (see my screen) on pressing which menu elements appear.

    String xpathCalendarToAppear =".....";

WebElement calendarToAppear= driver.findElement(By.xpath(xpathCalendarToAppear));
WebElement invisibleElement=driver.findElement(By.xpath(xpathInvisible));

Actions builder = new Actions(driver);
builder.MoveToElement(calendarToAppear).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
invisibleElement.Click();

В Firefox это работает нормально. Но у IE драйвера есть проблемы с кликом по элементам. Поэтому я решил эту «проблему IE», используя jscript напрямую, следующим образом:

WebElement hiddenWebElement =driver.findElement(By.xpath(....));
        ((JavascriptExecutor)driver).executeScript("arguments[0].click()",hiddenWebElement);

мы инициализируем переменную hiddenWebElement элементом, на который хотим щелкнуть. И используя jscript, мы нажимаем на него.

Надеюсь, это поможет вам.

0 голосов
/ 15 июня 2011

Выполните следующие действия:

selenium.focus("locator path of where you want to click");
selenium.keyPressNative("10"); // this is clicking entering button

. Это должно сработать.

Убедитесь, что вы не касаетесь мыши, пока Selenium выполняет оператор keyPressNative.

0 голосов
/ 03 июня 2011

Хорошо, я просто предполагаю, что ваш XPATH для получения правильного интервала, я подозреваю, что ваш сценарий селена работает быстрее, чем ваша страница, поэтому добавьте эту функцию, чтобы дождаться загрузки страницы

waitForPageToLoad

Надежда помогает :)

0 голосов
/ 27 мая 2011

Наша реализация календаря JQuery совместима с локаторами Selenium по умолчанию, хотя локаторы в DOM выглядят отключенными.Вот пример, который вы можете попробовать:

selenium.click("link=11:00 AM - 01:00 PM");
...