Как использовать JQuery в Selenium?
Я хотел бы использовать Selenium, чтобы щелкнуть вкладку в Интернете, где вкладка была создана динамически с помощью JQuery. Существует одна проблема, так как она была создана динамически, и вкладка не привязана к ID (только для класса), поэтому я не знаю, как это сделать, используя Selenium.
После googling в течение 2 недель я узнал, что это можно сделать с помощью JQuery, введя JQuery в Selenium и переупаковывая его, чтобы он поддерживал JQuery API. Но проблема в том, что я не знаю, как запустить JQuery script в Selenium?
Есть ли какие-либо ресурсы или рекомендации по созданию JQuery в Selenium? Как я буду запускать JQuery в Selenium?
Ответы
Ответ 1
Вы можете попробовать использовать мой selenium lib на github.
Он обрабатывает почти весь API jquery за вычетом функций, которые используют/требуют передачи обработчика:
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();
}
Ответ 2
Поскольку вы сказали, что у вас нет идентификатора, но класса:
(предоставляется только код класса)
... лучший ответ, скорее всего, будет использовать стратегию локатора CSS, которая уже зашла в Selenium, где вы можете выбрать элемент на основе класса css или просто с помощью логики селектора CSS (по крайней мере, css2 и css3 )
Итак, чтобы выбрать элемент (div, span any), который имеет определенный класс, вы можете просто использовать его для локатора Selenium:
css=.class-ID
Вы даже можете использовать более сложные селектора, похожие на те, которые доступны в JQuery, например:
css=#myDiv .class-ID
Это приведет к поиску элемента с стилем css class-ID
внутри элемента с идентификатором = myDiv
.
Ответ 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
Ответ 4
Моя команда только что закончила библиотеку, которая обертывает функции jquery для использования с Selenium. Мы только что закончили наш первый выпуск, но планируем обернуть ВСЕ функции jquery. Эта библиотека упрощает использование jquery из ваших тестов Selenium на С#. Это делает для MUCH чистых выглядящих тестов. Вот исходный код: https://github.com/AcklenAvenue/JQSelenium
Ответ 5
Вы можете использовать команду 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! |
Ответ 6
Вы запускаете jquery так же, как вы запускаете какую-либо java script, которую вы бы ввели. Попробуйте следующее: http://seleniumhq.org/docs/05_selenium_rc.html#learning-the-api