2012-06-28 14 views
11

मैं एक जीडब्ल्यूटी इनपुट तत्व में पाठ इनपुट करने के लिए सेलेनियम वेबड्राइवर का उपयोग करने की कोशिश कर रहा हूं जिसमें डिफ़ॉल्ट टेक्स्ट है, "उपयोगकर्ता आईडी दर्ज करें"। यहां ऐसे कुछ तरीके मैं काम करने के लिए इसे पाने के लिए कोशिश की है इस प्रकार हैं:सेलेनियम के साथ इनपुट तत्व से मैं डिफ़ॉल्ट टेक्स्ट को लगातार कैसे हटा सकता हूं?

 searchField.click(); 
     if(!searchField.getAttribute("value").isEmpty()) { 
      // clear field, if not already empty 
      searchField.clear(); 
     } 
     if(!searchField.getAttribute("value").isEmpty()) { 
      // if it still didn't clear, click away and click back 
      externalLinksHeader.click(); 
      searchField.click(); 
     } 

     searchField.sendKeys(username); 

अजीब बात यह ऊपर केवल समय की कुछ काम करता है। कभी-कभी, यह "उपयोगकर्ता आईडी दर्ज करें" की तलाश में समाप्त होता है, मूल रूप से डिफ़ॉल्ट पाठ के बाद "उपयोगकर्ता नाम" टाइप करना शुरू होता है - और इसे समाप्त भी नहीं करता है।

किसी अन्य बेहतर, अधिक विश्वसनीय तरीके से एक GWT तत्व से डिफ़ॉल्ट पाठ को साफ़ करने के लिए?

जोड़ने के लिए संपादित: इनपुट तत्व का HTML। दुर्भाग्य से, जेएस/जीडब्ल्यूटी गर्मता के लिए धन्यवाद, देखने के लिए बहुत कुछ नहीं है। यहाँ क्षेत्र जब यह चयन रद्द किया है:

<input type="text" class="gwt-TextBox empty" maxlength="40"> 

के बाद मैं इसे क्लिक किया और इसे मैन्युअल रूप से ध्यान केंद्रित किया है, डिफ़ॉल्ट पाठ और "खाली" वर्ग निकाल दिए जाते हैं।

जेएस से setDefaultText() को onBlur() और onChange() दोनों को रिक्त टेक्स्ट फ़ील्ड में परिवर्तन के परिणामस्वरूप कहा जाता है। मान लीजिए यही कारण है कि searchField.clear() मदद नहीं कर रहा है।

मैंने डीबग मोड में इस विधि के माध्यम से भी कदम उठाया है, और उस स्थिति में, यह कभी काम नहीं करता है। सामान्य रूप से चलाने पर, यह अधिकांश समय काम करता है। मैं नहीं कह सकता क्यों, यद्यपि।

+1

आप नियंत्रण से HTML की कॉपी पोस्ट कर सकते हैं, और वहाँ किसी भी जावास्क्रिप्ट कि नियंत्रण के साथ सूचना का आदान प्रदान होता है? – Arran

+2

क्या 'इनपुट' में डिफ़ॉल्ट टेक्स्ट' प्लेसहोल्डर 'एचटीएमएल 5 विशेषता से आता है, या क्या किसी प्रकार का' ऑनफोकस 'और' ऑनब्लर 'जावास्क्रिप्ट है? –

उत्तर

18

ठीक है, स्क्रिप्ट स्पष्ट रूप से तब जाती है जब clear() विधि input साफ़ करती है और इसे खाली छोड़ देती है। इसके साथ आने वाले समाधान नीचे दिए गए हैं। (अपाचे कॉमन्स लैंग या गूगल अमरूद के Strings.repeat() से StringUtils.repeat() काम में आ सकता है)

String b = Keys.BACK_SPACE.toString(); 
searchField.sendKeys(b+b+b+b+b+b+b+b+b+b + username); 

  • अच्छे एक Ctrl+A, Delete का उपयोग कर:

    1. भोली एक, Backspace 10 बार प्रेस

      String del = Keys.chord(Keys.CONTROL, "a") + Keys.DELETE; 
      searchField.sendKeys(del + username); 
      
    2. जावास्क्रिप्ट के माध्यम से input की सामग्री हटाई जा रही:

      JavascriptExecutor js = (JavascriptExecutor)driver; 
      js.executeScript("arguments[0].value = '';", searchField); 
      searchField.sendKeys(username); 
      
    3. पूरी तरह जावास्क्रिप्ट के माध्यम से input का मूल्य निर्धारित करना:

      JavascriptExecutor js = (JavascriptExecutor)driver; 
      js.executeScript("arguments[0].value = '" + username + "';", searchField); 
      

    ध्यान दें कि जावास्क्रिप्ट हमेशा काम नहीं हो सकता है, जैसा कि यहाँ दिखाया : Why can't I clear an input field with javascript?

  • +1

    विचारों के लिए बहुत बहुत धन्यवाद। मैंने 2 की कोशिश की, जो पहली बार काम करता है, लेकिन जब मैं एक दूसरे उपयोगकर्ता को खोजने के लिए वापस जाता हूं, तो केवल पहले उपयोगकर्ता नाम के अंतिम चरित्र को हटा देता है। बहुत अजीब। समाधान संख्या 4 के साथ, "ढूंढें" बटन जिसे खोज पर क्लिक किया जाना चाहिए सक्रिय नहीं होता है, क्योंकि वहां कोई क्लिक या संपादन ईवेंट नहीं होते थे। समाधान संख्या 3 मेरे लिए पूरी तरह से काम करता है। धन्यवाद! – mcole

    +0

    हू। मैंने सोचा कि नंबर 2 एक निश्चित शर्त थी। वैसे भी, मुझे खुशी है कि यह मदद की! –

    0

    इसके लायक होने के लिए मेरे पास एक बहुत ही समान समस्या है। वेबड्राइवर 2.28.0 और फ़ायरफ़ॉक्स 18.0।1

    मैं भी GWT का उपयोग कर रहा हूँ, लेकिन साधारण HTML/जे एस के साथ पुन: पेश कर सकते हैं:

    <html> 
    <body> 
    <div> 
    <h3>Box one</h3> 
    <input id="boxOne" type="text" onfocus="if (this.value == 'foo') this.value = '';" onblur="if (this.value == '') this.value = 'foo';"/> 
    </div> 
    <div> 
    <h3>Box two</h3> 
    <input id="boxTwo" type="text" /> 
    </div> 
    </body> 
    </html> 
    

    इस परीक्षा समय के सबसे विफल रहता है:

    @Test 
    public void testTextFocusBlurDirect() throws Exception { 
        FirefoxDriver driver = new FirefoxDriver(); 
    
        driver.navigate().to(getClass().getResource("/TestTextFocusBlur.html")); 
    
        for (int i = 0; i < 200; i++) { 
         String magic = "test" + System.currentTimeMillis(); 
         driver.findElementById("boxOne").clear(); 
         Thread.sleep(100); 
         driver.findElementById("boxOne").sendKeys(magic); 
         Thread.sleep(100); 
         driver.findElementById("boxTwo").clear(); 
         Thread.sleep(100); 
         driver.findElementById("boxTwo").sendKeys("" + i); 
         Thread.sleep(100); 
         assertEquals(magic, driver.findElementById("boxOne").getAttribute("value")); 
        } 
    
        driver.quit(); 
    } 
    

    यह सिर्फ ओएस लेने हो सकता है ब्राउज़र से दूर ध्यान केंद्रित करें वेबड्राइवर नियंत्रण नहीं कर सकता है। हमें लगता है कि सीआई सर्वर पर शायद यह मामला यह मामला नहीं है।

    0

    मैं अभी तक कोई टिप्पणी नहीं जोड़ सकता, इसलिए मैं इसे यहां एक उत्तर के रूप में डाल रहा हूं। मैं आपको सूचित करना चाहता हूं कि यदि आप इनपुट टेक्स्ट फ़ील्ड को साफ़ और/या संपादित करने के लिए केवल जावास्क्रिप्ट का उपयोग करना चाहते हैं, तो @slanec द्वारा दिया गया जावास्क्रिप्ट दृष्टिकोण काम नहीं करेगा। यहाँ एक उदाहरण है: Why can't I clear an input field with javascript?

    0
    In case you use c# then solution would be : 
    
    // provide some text 
    webElement.SendKeys("aa"); 
    // this is how you use this in C# , VS 
    String b = Keys.Backspace.ToString(); 
    
    // then provide back space few times 
    webElement.SendKeys(b + b + b + b + b + b + b + b + b + b); 
    
    संबंधित मुद्दे