Как добавить локаторы JQuery в Selenium Remote Control - PullRequest
7 голосов
/ 11 мая 2010

Я довольно счастливо использую XPath с Selenium и даже использую getEval с одним из Javascript, но коллега сказал, что было бы здорово использовать селекторы JQuery в Selenium.

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

Я использую C # для написания своих тестов на селен, поэтому, если какие-либо примеры могут быть с точки зрения C #, это было бы здорово.

Спасибо

Ответы [ 3 ]

9 голосов
/ 12 мая 2010

Карл Сведберг написал отличную запись в блоге, которую можно найти по адресу http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet

Мы адаптировали это и в основном в jar-файле Selenium Server мы изменили RemoteRunner.html, чтобы включить JavaScript jquery (полученный из http://code.jquery.com/jquery-latest.min.js):

        <script language="JavaScript" type="text/javascript" src="jquery.min.js"></script>
        <script language="JavaScript" type="text/javascript">
            function openDomViewer() {
                var autFrame = document.getElementById('selenium_myiframe');
                var autFrameDocument = new SeleniumFrame(autFrame).getDocument();
                this.rootDocument = autFrameDocument;
                var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html');
                return false;
            }
        </script>

Затем, чтобы включить это для использования в Selenium, мы добавляем стратегию определения местоположения:

mySelenium.addLocationStrategy("jquery",
            "var loc = locator; " +
            "var attr = null; " +
            "var isattr = false; " +
            "var inx = locator.lastIndexOf('@'); " +

            "if (inx != -1){ " +
            "   loc = locator.substring(0, inx); " +
            "   attr = locator.substring(inx + 1); " +
            "   isattr = true; " +
            "} " +

            "var found = jQuery(inDocument).find(loc); " +
            "if (found.length >= 1) { " +
            "   if (isattr) { " +
            "       return found[0].getAttribute(attr); " +
            "   } else { " +
            "       return found[0]; " +
            "   } " +
            "} else { " +
            "   return null; " +
            "}"
        );

Обратите внимание, что указанное выше добавление стратегии локатора происходит в Java, но это просто строка, поэтому ее легко реплицировать в C #. JQuery делает вещи намного быстрее, особенно в Internet Explorer!

Чтобы изменить jar, вы можете использовать инструмент командной строки java для обновления загруженного jar сервера selenium. Создайте папку на том же уровне, что и jar с именем «core», и поместите туда измененные файлы RemoteRunner.html и jquery.min.js. Затем запустите что-то вроде:

jar -uf selenium-server-standalone-2.0b3-APT.jar core\RemoteRunner.html
jar -uf selenium-server-standalone-2.0b3-APT.jar core\jquery.min.js

Если jar не находится на вашем пути, вы можете использовать полный путь, например, в Windows вы можете выполнить его следующим образом:

"C:\Program Files\Java\jdk1.6.0_22\bin\jar.exe" <arguments>
0 голосов
/ 15 августа 2012

Вы можете прочитать и выполнить_скрипт для включения jQuery:

  • Сначала вы можете прочитать jquery из файла jquery.js или jquery.min.js.
  • Затем с помощью execute_script (jquery) для динамического включения jquery.
  • Теперь вы можете взаимодействовать с jquery.

вот некоторый код на python, другой язык был бы похож:

browser = webdriver.Firefox() # Get local session of firefox

with open('jquery.min.js', 'r') as jquery_js: #read the jquery from a file
    jquery = jquery_js.read()
    browser.execute_script(jquery)  #active the jquery lib

#now you can write some jquery code then execute_script them
js = """
    var str = "div#myPager table a:[href=\\"javascript:__doPostBack('myPager','%s')\\"]"
    console.log(str)
    var $next_anchor = $(str);
    if ($next_anchor.length) {
        return $next_anchor.get(0).click(); //do click and redirect
    } else {
        return false;
    }""" % str(25) 

success = browser.execute_script(js)
if success == False:
    break

PS: Когда я использую Selenium для получения некоторого контента с какого-то сайта, меня всегда забанят.Теперь вы должны использовать прокси-сервер, чтобы пройти через него.
Вот код:

PROXY_HOST = "127.0.0.1"
PROXY_PORT = 8087
SOCKS_PORT = 8088

fp = webdriver.FirefoxProfile()

# Direct = 0, Manual = 1, PAC = 2, AUTODETECT = 4, SYSTEM = 5
fp.set_preference("network.proxy.type", 1)

fp.set_preference("network.proxy.http", PROXY_HOST)
fp.set_preference("network.proxy.http_port", PROXY_PORT)
fp.set_preference("network.proxy.socks", PROXY_HOST)
fp.set_preference("network.proxy.socks_port", SOCKS_PORT)
fp.set_preference("network.proxy.ftp", PROXY_HOST)
fp.set_preference("network.proxy.ftp_port", PROXY_PORT)
fp.set_preference("network.proxy.ssl", PROXY_HOST)
fp.set_preference("network.proxy.ssl_port", PROXY_PORT)

fp.set_preference("network.proxy.no_proxies_on", "") # set this value as desired

browser= webdriver.Firefox(firefox_profile=fp) # with proxy
browser = webdriver.Firefox() # no proxy
browser.get("http://search.example.com") # Load page

elem = browser.find_element_by_id("query_box") # Find the query input
elem.send_keys(u'my query string') # send query string to the input
elem.submit() # submit the query form
0 голосов
/ 12 мая 2010

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

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