Однако, прежде чем приступить, обеспечим, чтобы jQuery был доступен для Selenium RC. Для этого добавим загрузку скрипта библиотеки в файл RemoteRunner.html, который можно отыскать открыв selenium-server.jar (папка /core). Выглядеть это может так:
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
Либо можно скачать нужную версию библиотеки и разместить ее локально:
<script language="JavaScript" type="text/javascript" src="xpath/javascript-xpath-0.1.11.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/user-extensions.js"></script>
<script language="JavaScript" type="text/javascript" src="scripts/jquery.js"></script>
После редактирования JAR архив следует запаковать обратно. Подготовка окончена.
1. Расширение Location Strategy
Сия манипуляция проводится с помощью строчки:
selenium.addLocationStrategy("jquery", "return $(locator,inDocument).get(0);");
Ее нужно поместить заранее перед применением Location Strategy.
Теперь подробнее. "jquery" - это название новой Location Strategy, то есть теперь можно будет находить элемент, используя jQuery синтаксис, например, вот так:
selenium.click("jquery=#parent #child:contains('soul')");
Selenium произведет клик по элементу с id="child", который унаследован от элемента c id="parent" и к тому же содержит текст "soul". То есть, как уже становится понятно, насколько причудливо и изящно можно обращаться к элементам страницы.
Реализация стратегии здесь самая простая "return $(locator,inDocument).get(0);". locator - это та часть строки, которая после "jquery=" в нашем обращении. inDocument ссылается на текущий активный документ. get(0) - возвращает обычный DOM объект, с которым и работает Selenium. При желании, эта часть может быть расширена, хотя у меня такой необходимости не возникало.
2. Использования jQuery выражений
Предположим, что нам нужно переместить фокус на некое поле "name":
selenium.getEval("$('#name', window.document).focus();");
Такой простой функции в Selenium нет, поэтму пример может быть актуален. Что мы делаем? Функция getEval() выполняет JavaScript выражение, где и находтится наш jQuery. Важно только обратить внимание, что в функцию $ передается второй аргумент window.document - он необходим, поскольку по умолчанию Selenium будет выполнять JavaScript не для тестируемого окна, а для самого окошка RemoteRunner.