Выбор и идентификация элемента с помощью JQuery для использования его в Selenium 2 Java API - PullRequest
6 голосов
/ 30 марта 2011

Это ситуация:

  • Я использую Java API Selenium 2 для открытия и управления экземпляром браузера Firefox
  • Я загружаю скрипт jQuery на страницу при помощи JavaScript
  • Затем я использую выражения jQuery для выбора элементов и перемещения по дереву DOM

Теперь мой вопрос, могу ли я как-то найти уникальный идентификатор для каждого из найденных элементов? Моя цель - получить тот же элемент в Selenium с помощью селектора Xpath или CSS. Так что было бы очень просто, если бы я мог сгенерировать однозначный селектор для элементов в jQuery. Другие идеи тоже приветствуются.

Мне нужен автоматический подход для идентификации элементов в jQuery, который можно «преобразовать» в элементы / локаторы Selenium.

/ редактировать

Чтобы было понятнее:

Если я выбрал элемент в jQuery:

webDriver.executeScript("var element = $('#myDiv input.test')");

Теперь я хочу что-то вроде этого:

WebElement webElement = webDriver.executeScript("return element");

Возможно ли это?

Ответы [ 3 ]

9 голосов
/ 15 апреля 2011

Я нашел решение, которое довольно просто:

String jQuerySelector = "'#myDiv input.test'";
RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return $(" + jQuerySelector+ ").get(0);");

Работа с элементом в jQuery, который был ранее выбран в Selenium, тоже работает:

String jQuerySelector = "arguments[0]";
((JavascriptExecutor) webDriver).executeScript("return $(" + jQuerySelector+ ").doSomethingInJquery();", webElement);
0 голосов
/ 06 июня 2018

Использование eval делает это еще проще. Используйте селектор индекса, например [0], с кодом jQuery, иначе он вернет коллекцию элементов.

    String elementLocator = "$('#btnID')[0]";
    public RemoteWebElement getElementByJQueryLocator(String jQueryLocator){
        JavascriptExecutor js = (JavascriptExecutor) driver;
        RemoteWebElement element = (RemoteWebElement) js.executeScript("return eval(arguments[0]);", jQueryLocator);
        return element;
    }

        RemoteWebElement webElement = getElementByJQueryLocator(elementLocator);
        webElement.click();
0 голосов
/ 31 марта 2011

Не уверен в вашей конкретной проблеме, но вы можете создать свой локатор, используя атрибуты html id, name, class и т.д.

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