2012-08-14 17 views
26

का उपयोग कर रहा निम्न HTML है:सेलेनियम WebDriver में एक तत्व क्लिक करने के लिए कैसे जावास्क्रिप्ट

<button name="btnG" class="gbqfb" aria-label="Google Search" id="gbqfb"><span class="gbqfi"></span></button> 

मेरे क्लिक करके "गूगल खोज" बटन WebDriver में जावा का उपयोग कर अच्छी तरह से काम कर रहा है के लिए निम्न कोड।

driver.findElement(By.id("gbqfb")).click(); 

मैं बटन पर क्लिक करने के लिए WebDriver के साथ JavaScript का उपयोग करना चाहता हूं। मैं यह कैसे कर सकता हूं?

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor)driver; 
jse.executeScript("document.getElementById('gbqfb').click();"); 
+0

मैं समझ नहीं है - आप जावास्क्रिप्ट समारोह है कि से आबद्ध आग '.click चाहते हैं()' बटन? या आपको http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_How_do_I_execute_Javascript_directly जैसे कुछ चाहिए? – WTK

उत्तर

67

जावास्क्रिप्ट के माध्यम से एक क्लिक निष्पादित कुछ व्यवहार जिनमें से आप पता होना चाहिए है। यदि, उदाहरण के लिए, आपके तत्व की onclick ईवेंट से जुड़ा कोड window.alert() को आमंत्रित करता है, तो आप ब्राउज़र ड्राइवर के कार्यान्वयन के आधार पर अपना सेलेनियम कोड लटक सकते हैं। उस ने कहा, आप ऐसा करने के लिए JavascriptExecutor कक्षा का उपयोग कर सकते हैं। मेरा समाधान प्रस्तावित अन्य लोगों से भिन्न है, हालांकि, आप अभी भी तत्वों का पता लगाने के लिए वेबड्राइवर विधियों का उपयोग कर सकते हैं।

// Assume driver is a valid WebDriver instance that 
// has been properly instantiated elsewhere. 
WebElement element = driver.findElement(By.id("gbqfd")); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", element); 

तुम भी ध्यान देना चाहिए कि आप से बेहतर हो सकता है WebElement इंटरफ़ेस का click() विधि का उपयोग कर, लेकिन disabling native events अपने ड्राइवर instantiating से पहले। यह एक ही लक्ष्य (समान संभावित सीमाओं के साथ) पूरा करेगा, लेकिन आपको अपनी खुद की जावास्क्रिप्ट को लिखने और बनाए रखने के लिए मजबूर नहीं करेगा।

+0

मई मुझे पता है क्यों 'तर्क [0] .click(); '? आप कैसे जानते हैं कि यह सूचकांक 0 है? – huahsin68

+4

क्योंकि आप 'executeScript' कॉल में 0 वें तर्क के रूप में तत्व संदर्भ में गुजर रहे हैं। – JimEvans

+0

इसके लिए धन्यवाद, बस पूरी सुबह एक अच्छा समाधान खोजने के लिए बिताया और यह एक आकर्षण की तरह काम करता है। –

5

यहाँ WebDriver में बटन पर क्लिक करें जावास्क्रिप्ट का उपयोग कोड है। हालांकि, आप WebDriver का उपयोग कर जावा से जावास्क्रिप्ट निष्पादित कर सकते हैं, और आप किसी विशेष बटन पर क्लिक करने वाले कुछ जावास्क्रिप्ट कोड को कॉल कर सकते हैं।

WebDriver driver; // Assigned elsewhere 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("window.document.getElementById('gbqfb').click()"); 
+0

6 लोगों ने जवाब दिया है, लेकिन यह मेरे लिए काम नहीं कर रहा है। 'यह एक कार्य नहीं है ...' अपवाद। यहां तक ​​कि कंसोल पर स्क्रिप्ट निष्पादित नहीं किया जा सकता है, 'क्लिक() 'के बाद अर्धविराम नहीं होना चाहिए। –

+1

यह मेरे लिए काम करता है। मुझे अपवाद मिल रहा है क्योंकि एचटीएमएल पेज पूरी तरह से लोड नहीं हुआ था, मैंने 'थ्रेड स्लीप() पर अधिक समय लगाया, फिर यह मेरे लिए काम कर रहा है। धन्यवाद –

+0

यह काम करेगा जब हमारे पास लोकेटर के रूप में "आईडी" होगा। क्या होगा यदि मेरे पास लोकेटर के रूप में xpath है? –

2

आप जावास्क्रिप्ट में यह करने के लिए WebDriver उपयोग नहीं कर सकते, के रूप में WebDriver एक जावा उपकरण है:

+0

यह इन्स्टेन्शियशन बिना WebDriver उपयोग करने के लिए संभव है? ड्राइवर ऑब्जेक्ट को ड्राइवर = नया फ़ायरफ़ॉक्स ड्राइवर() के रूप में प्रारंभ किया जाना चाहिए; केवल घोषणा पर्याप्त नहीं है। –

+0

हां वास्तव में: मैंने तत्कालता (इसलिए टिप्पणी) नहीं जोड़ना चुना क्योंकि आप विभिन्न ब्राउज़रों से ड्राइवर को तुरंत चालू करना चाहते हैं। – Stilltorik

2

मैं जानता हूँ कि यह जावास्क्रिप्ट नहीं है, लेकिन आप भी शारीरिक रूप से एक गतिशील जावास्क्रिप्ट लंगर क्लिक करने के लिए माउस क्लिक करें का उपयोग कर सकते हैं:

public static void mouseClickByLocator(String cssLocator) { 
    String locator = cssLocator; 
    WebElement el = driver.findElement(By.cssSelector(locator)); 
    Actions builder = new Actions(driver); 
    builder.moveToElement(el).click(el); 
    builder.perform(); 
} 
1

सुनिश्चित नहीं हैं कि ओपी जवाब वास्तव में जवाब दिया गया था।

var driver = new webdriver.Builder().usingServer('serverAddress').withCapabilities({'browserName': 'firefox'}).build(); 

driver.get('http://www.google.com'); 
driver.findElement(webdriver.By.id('gbqfb')).click(); 
-10

क्रॉस ब्राउज़र का परीक्षण जावा स्क्रिप्ट

public class MultipleBrowser { 

    public WebDriver driver= null; 
    String browser="mozilla"; 
    String url="https://www.omnicard.com"; 

    @BeforeMethod 
    public void LaunchBrowser() { 

     if(browser.equalsIgnoreCase("mozilla")) 
      driver= new FirefoxDriver(); 
     else if(browser.equalsIgnoreCase("safari")) 
      driver= new SafariDriver(); 
     else if(browser.equalsIgnoreCase("chrome")) 
      //System.setProperty("webdriver.chrome.driver","/Users/mhossain/Desktop/chromedriver"); 
      driver= new ChromeDriver(); 
     driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS); 
     driver.navigate().to(url); 
    } 

} 

लेकिन आप फ़ायरफ़ॉक्स चलाने के लिए आप अन्यथा ब्राउज़र का शुभारंभ करेंगे लेकिन आवेदन नहीं कर सकते। (दोनों तरह से कोशिश), पथ अक्षम क्रोम की जरूरत चाहते हैं।

+4

क्यों यादृच्छिक शोर बजाय बनाने के सवाल का जवाब देने के प्रयास के लिए काम कर रहे? मैं स्टैक ओवरफ्लो पर हर जगह इस तरह के व्यवहार को देखता हूं। – nurettin

+0

यह सवाल का जवाब नहीं देता है क्योंकि प्रश्न पूछता है कि इसे जावास्क्रिप्ट के भीतर से कैसे करना है, जावा नहीं। – cpburnz

0

इस कोड WebElement "हम" 100 के बाद एमएस पर क्लिक आपरेशन प्रदर्शन करेंगे:

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor)driver; 

jse.executeScript("var elem=arguments[0]; setTimeout(function() {elem.click();}, 100)", we); 
+1

इस कोड स्निपेट [स्पष्टीकरण सहित] सवाल है, का समाधान हो सकता है (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) वास्तव में अपनी पोस्ट की गुणवत्ता में सुधार करने के लिए मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जानते हैं। [समीक्षा से] (https://stackoverflow.com/review/low-quality-posts/15068687) – Ferrybig

+0

इस कोड WebElement "हम" के बाद (100/1000) सेकंड पर क्लिक आपरेशन प्रदर्शन करेंगे। – hemanto

+0

मैं जानना चाहता हूं कि कोई इस जवाब को क्यों कम कर देगा। – hemanto