Получить элемент с помощью jquery и selenium IDE 1.0.8

Я пытаюсь получить элемент с помощью jquery и Selenium IDe 1.0.8.

<td>storeValue</td>
<td>$('#result').find('img').filter('[alt=&quot;NameOfPhoto&quot;]').eq(0)</td>
<td></td>

И в журнале я получаю

[error] Element $('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0) not found 

Когда я помещаю эту команду в firebug, я получаю этот элемент:/

Почему это не работает?

РЕДАКТИРОВАТЬ: В качестве альтернативы, например, вы можете дать мне код, как получить идентификатор первого объекта с тегом JAVA на главной странице stackoverflow.

ТЕГ:

<a rel="tag" title="show questions tagged 'java'" class="post-tag" href="/questions/tagged/java">java</a>

и результат примера:

<div id="question-summary-4303985" class="question-summary narrow">

is:

question-summary-4303985

person user278618    schedule 15.11.2010    source источник


Ответы (6)


Основываясь на других сообщениях, я попробовал следующее, и это сработало.

Добавьте приведенный ниже код в файл user-extensions.js:

function jQuery (selector)
{
    return selenium.browserbot.getUserWindow().jQuery(selector);
}

Затем вы можете получить доступ к любой функции jQuery, используя ключевое слово jQuery вместо $. Просто убедитесь, что тестируемая страница ссылается на файл jQuery js.

person Johann Strydom    schedule 12.07.2011
comment
Здорово! Это сработало для меня! я пробовал то, что было предложено в этом ответе 2819798" title="как добавить локаторы jquery в дистанционное управление селеном"> stackoverflow.com/questions/2814007/ получил ошибку, что jQuery не является функцией, а затем добавил приведенный выше скрипт, как вы сказали. Работал! Спасибо! - person Senthil Kumar; 28.07.2011

Чтобы использовать jQuery с Selenium IDE, его расположение указано ниже. (Убедитесь, что на вашей странице загружен jQuery)

this.page().getCurrentWindow().wrappedJSObject.jQuery()

Вы можете сохранить местоположение функции в переменной Selenium.

<tr>
    <td>store</td>
    <td>this.page().getCurrentWindow().wrappedJSObject.jQuery</td>
    <td>jq</td>
</tr>

Затем вы можете использовать их в своих тестах, например:

<tr>
    <td>assertEval</td>
    <td>${jq}('div').attr('foo')</td>
    <td>bar</td>
</tr>

Выше соответствует <div foo='bar' /> с использованием jQuery.


Изменить: в качестве альтернативы вы можете получить к нему доступ:

this.browserbot.getUserWindow().jQuery
selenium.browserbot.getUserWindow().jQuery

источник альтернативы: http://cssgreut.wordpress.com/2010/12/20/run-selenium-ide-tests-with-jquery-selectors/

person Quang Van    schedule 22.03.2011
comment
+1 за фактическое отображение источника! Кажется, это выходит за рамки большинства людей, помогающих с Selenium. - person Scottingham; 06.06.2013

попробуйте использовать jQuery вместо $(). Знак доллара имеет другое значение в селене.

ИЗМЕНИТЬ

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

person shoebox639    schedule 17.11.2010

Вы связали jQuery в банке Selenium? Если нет, вы не можете использовать этот синтаксис.

person Rajasankar    schedule 30.11.2010
comment
Если вы используете Selenium RC, проверьте сообщение в блоге Jian johnjianfang.blogspot.com/2009/04/. Для IDE вы можете добавить jquery в качестве пользовательского расширения. Обратитесь к документации по селену. - person Rajasankar; 01.12.2010

Пример сохранения текущей даты с помощью JavaScript и ее повторения в консоли журнала Selenium с помощью ${}:

<tr>
    <td>store</td>
    <td>javascript{new Date}</td>
    <td>foo</td>
</tr>
<tr>
    <td>echo</td>
    <td>${foo}</td>
    <td></td>
</tr>

Как видите, чтобы использовать store с результатом выражения JavaScript, добавьте javascript{} вокруг выражения.

Ваш пример с использованием javascript{storedVars['bar']} для вывода сохраненной переменной.

<tr>
    <td>store</td>
    <td>javascrip{jQuery('#result').find('img').filter('[alt="NameOfPhoto"]').eq(0)}</td>
    <td>bar</td>
</tr>
<tr>
    <td>open</td>
    <td>javascript{storedVars['bar']}</td>
    <td></td>
</tr>

JavaScript в Selenium:

С помощью javascript{alert('hello')} вы можете запускать JavaScript/jQuery в полях значений.

Существует также расширение для Selenium, чтобы показать, какие переменные хранятся: http://reallysimplethings.wordpress.com/2010/09/28/the-stored-variables-viewer-plugin-for-selenium-ide.-v1-3-released/

person powtac    schedule 23.11.2010
comment
Это не работает:/ Я получаю: ошибка [ошибка] Неожиданное исключение: сообщение -> jQuery не является функцией, имя файла -> chrome://selenium-ide/content/selenium/scripts/selenium-api.js, номер строки -> 2490, стек -> (javascript{jQuery('#result').find('img').filter('[alt=\NameOfPhoto\]').eq(0)}) - person user278618; 29.11.2010
comment
Проверьте официальную документацию о том, как хранить vars. - person powtac; 02.12.2010
comment
я думаю, что user278618 прав, я тоже не мог получить доступ к jQuery таким образом, и я не уверен, имеет ли это какое-либо отношение к хранимым переменным, поправьте меня, если я ошибаюсь. - person Quang Van; 21.03.2011
comment
Так что не используйте jQuery, вы можете выбрать любой другой нормальный селектор, чтобы поместить значение в панель. - person powtac; 21.03.2011
comment
хороший совет по плагину Selenium Stored Variables... не знал, что есть куча других полезных дополнений к Selenium. Спасибо. :) - person Quang Van; 26.03.2011

Воспользуйтесь этой инструкцией из блога Германа Румма.

Сначала загрузите Sizzle, механизм выбора для jQuery, и распакуйте sizzle.js в удобное место.
Во-вторых, создайте пустой файл user-extensions.js. Кстати, имя может быть любым.
Добавьте его в user-extensions.js.

PageBot.prototype.locateElementBySizzle = function(locator, inDocument) {
  var results = [];
  window.Sizzle(locator, inDocument, results);
  return results.length > 0 ? results[0] : null;
}

В-третьих, перейдите в Selenium IDE, Options -> Options… и добавьте sizzle.js и user-extensions.js в «Selenium Core extensions».
Перезапустите Selenium IDE (просто закройте все его экземпляры и откройте снова), и теперь вы можете использовать sizzle=(locator) везде, где нужен «локатор»

Ваш селектор будет выглядеть так:

#result img[alt="NameOfPhoto"]:eq(0)

Селекторы JQuery в основном происходят из селекторов CSS, поэтому вы можете использовать их и в селене.

css=cssSelector

person cetnar    schedule 09.04.2011