如何在Selenium中使用JQuery?

我想使用Selenium单击Web选项卡,其中选项卡是使用JQuery动态创建的。 有一个问题,因为它是动态创建的,并且标签没有绑定它(只提供了类ID),所以我没有线索使用Selenium点击它。

在谷歌搜索了2周之后,我发现可以通过将JQuery注入Selenium并重新打包以便它支持JQuery API来使用JQuery来完成。 但现在的问题是我不知道如何在Selenium中触发JQuery脚本?

是否有任何资源或在Selenium中设置JQuery的指南? 我如何在Selenium中执行JQuery?

您可以尝试在github上使用我的selenium lib。

它几乎处理整个jquery API减去使用/ require处理程序传递的函数:

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(); } 

既然你说你没有身份证而是上课:

(仅提供class-ID)

…一个更好的答案可能是使用已经在Selenium中编入的CSS定位器策略,您可以在其中选择基于css类的元素或者仅使用CSS选择器逻辑(至少对于css2和css3)

因此,要选择具有特定类的元素(div,span whatever),您只需将其用于Selenium定位器:

 css=.class-ID 

您甚至可以使用与JQuery中可用的类似的更复杂的选择器,例如:

 css=#myDiv .class-ID 

这将在具有ID = myDiv的元素中搜索具有class-ID的css样式的元素。

  • 首先,您可以从jquery.js或jquery.min.js文件中读取jquery。
  • 然后使用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 

我的团队刚刚完成了一个包含jquery函数的库,可以与Selenium一起使用。 我们刚刚完成了第一个版本,但计划包装所有jquery的函数。 这个库使您可以轻松地使用C#中的Selenium测试中的jquery。 它使得更清洁的外观测试。 这是源代码: https : //github.com/AcklenAvenue/JQSelenium

您可以在getEval命令中使用window.jQuery:

 |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! | 

你触发jquery就像你触发一些你注入的java脚本一样。 试试这个方法: http : //seleniumhq.org/docs/05_selenium_rc.html#learning-the-api