2010-07-13 3 views
12

मैं एक वेब के टैब पर क्लिक करने के लिए सेलेनियम का उपयोग करना चाहता हूं जहां टैब JQuery का उपयोग करके गतिशील रूप से बनाया गया था। एक समस्या है, क्योंकि इसे गतिशील रूप से बनाया गया था और टैब को इसके साथ कोई आईडी नहीं मिली (केवल क्लास-आईडी प्रदान की गई), इसलिए मैं सेलेनियम का उपयोग करके उस पर क्लिक करने के लिए सुराग से बाहर निकल रहा हूं।सेलेनियम में JQuery का उपयोग कैसे करें?

2 सप्ताह के लिए googling के बाद, मुझे पता चला कि यह JQuery का उपयोग सेलेनियम में JQuery इंजेक्शन करके और इसे पुन: पैकेज करने के द्वारा किया जा सकता है ताकि यह JQuery API का समर्थन कर सके। लेकिन अब समस्या यह है कि मुझे नहीं पता कि सेलेनियम में JQuery स्क्रिप्ट कैसे ट्रिगर करें?

क्या सेलेनियम में JQuery स्थापित करने पर कोई संसाधन है या दिशानिर्देश है? मैं सेलेनियम में JQuery निष्पादित करने के लिए कैसे जा रहा हूँ?

उत्तर

9

आप github पर अपने सेलेनियम lib का उपयोग करने का प्रयास कर सकते हैं।

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

jQuery की नो कॉन्फ्लिक्ट विधि यहां कॉल की गई है: https://github.com/Nthalk/SeleniumJQuery/blob/master/src/com/anteambulo/SeleniumJQuery/jQueryFactory.java#L144 – Nthalk

0

आप jquery को उसी तरह ट्रिगर करेंगे जैसे आप इंजेक्ट करने वाली कुछ जावा स्क्रिप्ट को ट्रिगर करेंगे। प्रयास करें कि यह कैसे करने के लिए: http://seleniumhq.org/docs/05_selenium_rc.html#learning-the-api

4

जब से तुम ने कहा कि आप एक आईडी लेकिन एक वर्ग नहीं था:

(केवल वर्ग-आईडी प्रदान की)

... एक बेहतर उत्तर सीएसएस लोकेटर रणनीति का उपयोग करने की संभावना है जो सेलेनियम में पहले से बेक किया गया है, जहां आप सीएसएस चयनकर्ता के आधार पर या सीएसएस चयनकर्ता तर्क (कम से कम सीएसएस 2 और सीएसएस 3) के लिए उपयोग कर सकते हैं,

तो चुनने के लिए एक तत्व (div, जो भी अवधि) जिसमें एक है विशिष्ट वर्ग आप बस सेलेनियम लोकेटर के लिए इसका उपयोग कर सकते हैं:

css=.class-ID 

आप और भी जटिल चयनकर्ताओं है कि इस तरह के रूप में JQuery में उपलब्ध उन के समान हैं का उपयोग कर सकते हैं:

css=#myDiv .class-ID 

यह तत्व के लिए खोज करेंगे आईडी = myDiv के साथ तत्व के भीतर class-ID की एक सीएसएस शैली के साथ।

2

आप getEval आदेश में window.jQuery इस्तेमाल कर सकते हैं:

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

यह मेरे लिए काम करता

यह लगभग पूरे jQuery एपीआई संभालती शून्य से कार्यों का उपयोग कि/हैंडलर गुजर की आवश्यकता होती है सेलेनियम आईडीई।

FF3 के लिए, jQuery वस्तु पाने के लिए wrappedJSObject का उपयोग करें:

|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.js या jquery.min.js फ़ाइल से jQuery पढ़ सकते हैं।
  • फिर jquery गतिशील रूप से सक्षम करने के लिए execute_script (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 
3

मेरी टीम केवल लाइब्रेरी कि सेलेनियम साथ प्रयोग के लिए jQuery कार्यों लपेटता समाप्त:
यहाँ कुछ कोड है। हमने अभी अपनी पहली रिलीज समाप्त की है, लेकिन सभी jquery के कार्यों को लपेटने की योजना है। यह लाइब्रेरी सी # में आपके सेलेनियम परीक्षणों से jquery का उपयोग करना आसान बनाता है। यह बहुत साफ दिखने वाले परीक्षणों के लिए बनाता है। यहां स्रोत कोड है: https://github.com/AcklenAvenue/JQSelenium

+3

आप सी # का उल्लेख करते हैं, क्या यह जावा का समर्थन करता है? – huahsin68

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^