2010-07-13 4 views
12

Я хотел бы использовать Selenium, чтобы щелкнуть вкладку веб-страницы, где вкладка была создана динамически с помощью JQuery. Существует одна проблема, так как она была создана динамически, и вкладка не привязана к ID (только для класса), поэтому я не знаю, как это сделать, используя Selenium.Как использовать JQuery в Selenium?

После поискового запроса в течение 2 недель я узнал, что это можно сделать с помощью JQuery, введя JQuery в Selenium и переупаковывая его так, чтобы он поддерживал API JQuery. Но проблема теперь в том, что я не знаю, как запускать сценарий JQuery в Selenium?

Есть ли какие-либо ресурсы или руководство по настройке JQuery в Selenium? Как я буду запускать JQuery в Selenium?

ответ

9

Вы можете попробовать использовать мой selenium lib по адресу github.

Он обрабатывает почти весь JQuery API минус функции, которые используют/требуют обработчика прохождения:

HtmlUnitDriver drv = new HtmlUnitDriver(BrowserVersion.FIREFOX_3_6); 
drv.setJavascriptEnabled(true); 
try { 
    jQueryFactory jq = new jQueryFactory(); 
    jq.setJs(drv); 

    drv.get("http://google.com"); 
    jq.query("[name=q]").val("SeleniumJQuery").parents("form:first").submit(); 

    String results = jq.queryUntil("#resultStats:contains(results)").text(); 
    System.out.println(results.split(" ")[1] + " results found!"); 
} finally { 
    drv.close(); 
} 
+0

Это круто и экономит много интеграционных работ. Благодарю. –

+0

Вызывается метод noConflict jQuery: https://github.com/Nthalk/SeleniumJQuery/blob/master/src/com/anteambulo/SeleniumJQuery/jQueryFactory.java#L144 – Nthalk

4

Поскольку вы сказали, что не имеет идентификатора, но класс:

(только класс-ID) при условии

... лучше ответ, скорее всего, будет использовать стратегию локатора CSS, которая уже зашла в Selenium, где вы можете выбрать элемент на основе класса css или просто с помощью логики селектора CSS (по крайней мере, css2 и css3)

Итак, чтобы выбрать элемент (div, span any), который имеет определенный класс вы можете просто использовать это для Selenium локатора:

css=.class-ID 

Вы даже можете использовать более сложные селекторы, которые похожи на те, которые доступны в JQuery, таких как:

css=#myDiv .class-ID 

Это будет искать для элемента с css-типом class-ID внутри элемента с ID = myDiv.

2

Вы можете использовать window.jQuery в команде getEval:

|getEval | window.jQuery('div#main button').click(); | | 

Он работает для меня на Selenium IDE.

Для FF3, используйте wrappedJSObject, чтобы получить объект JQuery:

|getEval | win = (this.page().getCurrentWindow().wrappedJSObject) ? this.page().getCurrentWindow().wrappedJSObject : this.page().getCurrentWindow() | | 
|getEval | jq = win.jQuery | | 
|assertEval | jq("div#main button").text() | click me! | 
3
  • Сначала вы можете прочитать JQuery из через jquery.js или jquery.min.js файла.
  • Затем с помощью execute_script (jquery) для динамического включения jquery.
  • Теперь вы можете взаимодействовать с jquery.

здесь некоторый код:

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 
3

Моя команда только что закончил библиотеку, которая оборачивает функции JQuery для использования с селеном. Мы только что закончили наш первый выпуск, но планируем обернуть ВСЕ функции jquery. Эта библиотека упрощает использование jquery из ваших тестов Selenium на C#. Это делает для MUCH чистых выглядящих тестов. Вот исходный код: https://github.com/AcklenAvenue/JQSelenium

+3

вы упоминаете C#, поддерживает ли JAVA? – huahsin68

Смежные вопросы