Подтвердить что ты не робот

Как использовать JQuery в Selenium?

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

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

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

4b9b3361

Ответ 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! |