2010-05-11 19 views
7

में एक JQuery लोकेटर कैसे जोड़ूं मैं सेलेनियम के साथ XPath का उपयोग करके खुशी से और जावास्क्रिप्ट के साथ getEval का उपयोग कर रहा हूं, लेकिन एक सहयोगी ने कहा कि JQuery का उपयोग करने में सक्षम होना अच्छा नहीं होगा सेलेनियम में चयनकर्ता।मैं सेलेनियम रिमोट कंट्रोल

मैंने इसे गुमराह किया है, लेकिन मेरे लिए काम करने वाले प्रतीत कोई लेख नहीं मिल रहा है। क्या कोई भी दस्तावेज़ तत्वों और सेलेनियम से संबंधित संबंधित मूल्यों को निकालने के लिए JQuery वाक्यविन्यास का उपयोग करने के तरीके पर एक विस्तृत मार्गदर्शिका प्रदान कर सकता है।

मैं अपने सेलेनियम परीक्षण लिखने के लिए सी # का उपयोग कर रहा हूं, इसलिए यदि कोई उदाहरण सी # परिप्रेक्ष्य से हो सकता है जो बहुत अच्छा होगा।

धन्यवाद

उत्तर

9

कार्ल Swedberg लिखा http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet

हम इस अनुकूलित और सेलेनियम सर्वर जार फ़ाइल में मूल रूप से हम RemoteRunner.html संशोधित jQuery जावास्क्रिप्ट (http://code.jquery.com/jquery-latest.min.js से प्राप्त) को शामिल करने पर पाया जा सकता है इसके बारे में एक बहुत अच्छा ब्लॉग प्रविष्टि:

 <script language="JavaScript" type="text/javascript" src="jquery.min.js"></script> 
     <script language="JavaScript" type="text/javascript"> 
      function openDomViewer() { 
       var autFrame = document.getElementById('selenium_myiframe'); 
       var autFrameDocument = new SeleniumFrame(autFrame).getDocument(); 
       this.rootDocument = autFrameDocument; 
       var domViewer = window.open(getDocumentBase(document) + 'domviewer/domviewer.html'); 
       return false; 
      } 
     </script> 

फिर सेलेनियम में इस्तेमाल के लिए इस सक्षम करने के लिए हम स्थान रणनीति जोड़ें:

mySelenium.addLocationStrategy("jquery", 
      "var loc = locator; " + 
      "var attr = null; " + 
      "var isattr = false; " + 
      "var inx = locator.lastIndexOf('@'); " + 

      "if (inx != -1){ " + 
      " loc = locator.substring(0, inx); " + 
      " attr = locator.substring(inx + 1); " + 
      " isattr = true; " + 
      "} " + 

      "var found = jQuery(inDocument).find(loc); " + 
      "if (found.length >= 1) { " + 
      " if (isattr) { " + 
      "  return found[0].getAttribute(attr); " + 
      " } else { " + 
      "  return found[0]; " + 
      " } " + 
      "} else { " + 
      " return null; " + 
      "}" 
     ); 

ध्यान दें कि लोकेटर रणनीति का उपरोक्त जोड़ा जावा में है, लेकिन इसकी एक स्ट्रिंग है जिसे सी # में आसानी से दोहराया जाना चाहिए। JQuery चीजों को बहुत तेज बनाता है, खासकर इंटरनेट एक्सप्लोरर में!

जार को संशोधित करने के लिए आप डाउनलोड किए गए सेलेनियम सर्वर जार को अद्यतन करने के लिए जावा कमांड लाइन टूल का उपयोग कर सकते हैं। "कोर" नामक जार के समान स्तर पर एक फ़ोल्डर बनाएं और संशोधित RemoteRunner.html और jquery.min.js फ़ाइलों को वहां रखें। फिर जैसे कुछ चलाएँ:

jar -uf selenium-server-standalone-2.0b3-APT.jar core\RemoteRunner.html 
jar -uf selenium-server-standalone-2.0b3-APT.jar core\jquery.min.js 

तो जार अपने पथ में नहीं है आप खिड़कियों पर उदाहरण के लिए पूरा पथ का उपयोग कर सकते हैं, तो आप की तरह कुछ के साथ निष्पादित कर सकते हैं:

"C:\Program Files\Java\jdk1.6.0_22\bin\jar.exe" <arguments> 
+0

मैं इस बहुत intersting पाया:
यहाँ कुछ कोड है! लेकिन मुख्य सवाल यह है कि: हम इस jquery-एक्सटेंशन का उपयोग कैसे कर सकते हैं, उदाहरण के लिए।jquery द्वारा चुने गए टेक्स्टरेरा में टाइप करें? –

+2

@ एंड्रियास आप अपने लोकेटर अभिव्यक्ति को शुरू करने के लिए jquery = का उपयोग करें और फिर jquery का उपयोग करें! उदाहरण लोकेटर अभिव्यक्ति (जानबूझकर सरल उदाहरण नहीं): "jquery = table # myParentTableID> input.input-class" – Zugwalt

+0

धन्यवाद, ऐसा हुआ! –

0

आप AddLocationStrategy पद्धति का उपयोग करके एक नए स्थान की रणनीति निर्धारित करना होगा और अपने उपयोगकर्ता के extensions.js फ़ाइल में jQuery शामिल करने के लिए की आवश्यकता होगी।

0

आप पढ़ सकते हैं और execute_script jQuery सक्षम करने के लिए:

  • सबसे पहले आप एक 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 
संबंधित मुद्दे