代码之家  ›  专栏  ›  技术社区  ›  huahsin68

如何在Selenium中使用JQuery?

  •  12
  • huahsin68  · 技术社区  · 14 年前

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

    在google上搜索了两周之后,我发现可以使用JQuery将JQuery注入Selenium并重新打包以使其支持jqueryapi。但现在的问题是我不知道如何在Selenium中触发JQuery脚本?

    在Selenium中设置JQuery有什么参考资料或指南吗?如何在Selenium中执行JQuery?

    6 回复  |  直到 10 年前
        1
  •  9
  •   Nthalk    13 年前

    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();
    }
    
        2
  •  4
  •   Jay Stevens hutchonoid    14 年前

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

    css=.class-ID
    

    css=#myDiv .class-ID
    

    这将搜索css样式为的元素 class-ID 在ID为的元素中= myDiv .

        3
  •  4
  •   Lei Cao    12 年前
    • 首先,可以从jquery.js或jquery.min.js文件中读取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
    


    下面是一些代码:

    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
  •  3
  •   Byron Sommardahl    12 年前

    我的团队刚刚完成了一个库,它封装了jquery函数,以便与Selenium一起使用。我们刚刚完成了第一个版本,但计划包装jquery的所有函数。这个库使得在C#中使用Selenium测试中的jquery变得很容易。它使测试看起来更干净。以下是源代码: https://github.com/AcklenAvenue/JQSelenium

        5
  •  2
  •   Takaaki Kasai    13 年前

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

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

    它对我的硒IDE有效。

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