सेलेनियम के साथ textarea से स्पष्ट पाठ


142

मुझे कुछ परीक्षण मिले हैं जहाँ मैं जाँच रहा हूँ कि कुछ क्षेत्रों में पाठ अमान्य होने पर उचित त्रुटि संदेश प्रकट होता है। वैधता के लिए एक जांच यह है कि एक निश्चित बनावट तत्व खाली नहीं है।

यदि इस ग्रन्थकार में पहले से ही पाठ है, तो मैं क्षेत्र को खाली करने के लिए सेलेनियम को कैसे बता सकता हूं?

कुछ इस तरह:

driver.get_element_by_id('foo').clear_field()

1
मुझे यह ड्राइवर मिल गया ।get_element_by_id ('foo')। स्पष्ट ()
इसहाक

जवाबों:


215
driver.find_element_by_id('foo').clear()

4
यह मेरे लिए हाल के सेलेनियम संस्करण में काम नहीं करता है।
उदाहरण के द्वारा लर्निंग स्टैट्स

3
Youp chromedriver भी इस पर टूटता है। फेनिक्स उत्तर हर जगह काम करता है
norbertas.gaulia

1
यह परस्पर विरोधी सेलेनियम और क्रोमेड्रिवर संस्करणों के साथ एक मुद्दा हो सकता है। ऐसा लगता नहीं है कि देवता क्रोमेड्राइवर से जानबूझकर इस कार्यक्षमता को हटा देंगे।
आइजैक

7
फिलहाल यह जवाब रिएक्ट ऐप्स में सही तरीके से काम नहीं करता है क्योंकि यह स्पष्ट नहीं होगा कि रिएक्ट ऑनकॉन्ग फ़ंक्शन को आग देगा। इस प्रकार आपका इनपुट क्लियर हो जाएगा और परीक्षण चालू हो जाएंगे और आपके कंपोनेंट की स्थिति वैसी ही रहेगी जैसी पहले थी। प्रतिक्रिया मुद्दा , सेलेनियम मुद्दा
ncrmro

1
@ncrmro 3 साल बाद ऐसा लग रहा है कि यह अभी भी काम नहीं करता है
स्टीफन

81

आप उपयोग कर सकते हैं

 webElement.clear();

यदि यह तत्व एक पाठ प्रविष्टि तत्व है, तो इससे मान साफ़ हो जाएगा।

ध्यान दें कि इस ईवेंट द्वारा निकाल दी गई घटनाएं वैसी नहीं हो सकती हैं जैसी आप अपेक्षा करते हैं। विशेष रूप से, हम किसी भी कीबोर्ड या माउस ईवेंट को फायर नहीं करते हैं। यदि आप यह सुनिश्चित करना चाहते हैं कि कीबोर्ड की घटनाओं को निकाल दिया जाए, तो कुछ का उपयोग करने पर विचार करेंsendKeys(CharSequence) । उदाहरण के लिए:

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop

या:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);

4
CTRL + 'का उपयोग करते समय' स्थिति पर विचार करें जब परीक्षण MacOS (अन्य कीबोर्ड शॉर्टकट) पर चल रहा होगा। Btw- अच्छा सुझाव, मेरी समस्या हल कर दी।
आउटसाइड_Box

1
मेरी समस्या "Keys.BACK_SPACE" द्वारा हल की गई। मैं बस खोज परीक्षण क्षेत्र पर कब्जा करता हूं, रन (।) क्लिक करता हूं, फिर एक लूप के अंदर कोड चलाता हूं। यह सभी चार्टरर्स को पहले से खोज क्षेत्र को हटा देता है। फिर खोज फ़ील्ड में नया मान भेजें। सिर्फ .clear () फ़ंक्शन मेरे लिए काम नहीं कर रहा था।
नोमन_ब्राहिम

केवल webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loopमेरे अजीब मामले में मदद की
Chaki_Black

17

मैं एक ऐसे मैदान में भाग गया जहाँ .clear () काम नहीं करता था। इस क्षेत्र के लिए पहले दो उत्तरों के संयोजन का उपयोग करना।

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);

;फिर के लिए क्या है ?
स्टीफन

1
;अजगर में @ surfer190 आवश्यक नहीं है। मैंने इसे दुर्घटना से जोड़ा। अच्छी पकड़।
जोर्तेगा


4

जावा के लिए

driver.findelement(By.id('foo').clear();

या

webElement.clear();

यदि यह तत्व एक पाठ प्रविष्टि तत्व है, तो इससे मान साफ़ हो जाएगा।


3

यह सामान्य वाक्य रचना है

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();

1

स्पष्ट () के एक साधारण कॉल के साथ यह डोम में प्रकट होता है कि संबंधित इनपुट / टेक्स्टारिया घटक का अभी भी अपना पुराना मूल्य है, इसलिए उस घटक पर कोई भी निम्न परिवर्तन (जैसे एक नए मूल्य के साथ घटक को भरना) समय में संसाधित नहीं किया जाएगा।

यदि आप सेलेनियम स्रोत कोड पर एक नज़र डालें तो आप पाएंगे कि स्पष्ट () - विधि निम्नलिखित टिप्पणी के साथ प्रलेखित है:

/ ** यदि यह तत्व एक पाठ प्रविष्टि तत्व है, तो यह मान को साफ कर देगा। अन्य तत्वों पर कोई प्रभाव नहीं है। पाठ प्रविष्टि तत्व INPUT और TEXTAREA तत्व हैं। ध्यान दें कि इस ईवेंट द्वारा निकाल दी गई घटनाएं वैसी नहीं हो सकती हैं जैसी आप अपेक्षा करते हैं। विशेष रूप से, हम किसी भी कीबोर्ड या माउस ईवेंट को फायर नहीं करते हैं। यदि आप यह सुनिश्चित करना चाहते हैं कि कीबोर्ड की घटनाओं को निकाल दिया जाए, तो बैकस्पेस कुंजी के साथ {@link #sendKeys (CharSequence ...)} का उपयोग करने पर विचार करें। यह सुनिश्चित करने के लिए कि आपको एक परिवर्तन ईवेंट मिल रहा है, टैब कुंजी के साथ {@link #sendKeys (CharSequence ...)} पर कॉल करें। * /

तो इस उपयोगी संकेत का उपयोग करके एक इनपुट / टेक्स्टारिया (एक घटक जो पहले से ही एक मूल्य है) को साफ़ करने के लिए है और इसके लिए एक नया मान असाइन करें, आपको निम्न जैसा कुछ कोड मिलेगा:

public void waitAndClearFollowedByKeys(By by, CharSequence keys) {
    LOG.debug("clearing element");
    wait(by, true).clear();
    sendKeys(by, Keys.BACK_SPACE.toString() + keys);
}

public void sendKeys(By by, CharSequence keysToSend) {
    WebElement webElement = wait(by, true);
    LOG.info("sending keys '{}' to {}", escapeProperly(keysToSend), by);
    webElement.sendKeys(keysToSend);
    LOG.info("keys sent");
}

private String escapeProperly(CharSequence keysToSend) {
    String result = "" + keysToSend;
    result = result.replace(Keys.TAB, "\\t");
    result = result.replace(Keys.ENTER, "\\n");
    result = result.replace(Keys.RETURN, "\\r");

    return result;
}

इस कोड के जावा और पायथन न होने के लिए क्षमा करें। इसके अलावा, मुझे एक अतिरिक्त "WaitUntilPageIsReady () - विधि को छोड़ना पड़ा, जो इस पोस्ट को बहुत लंबा बना देगा।

आशा है कि यह सेलेनियम के साथ आपकी यात्रा में मदद करता है!


1

मेरे अनुभव में, यह सबसे कुशल निकला

driver.find_element_by_css_selector('foo').send_keys(u'\ue009' + u'\ue003')

हम सभी वर्णों को इनपुट से हटाने के लिए Ctrl + Backspace भेज रहे हैं, आप हटाए जाने के साथ बैकस्पेस भी बदल सकते हैं।

संपादित करें: कुंजी निर्भरता को हटा दिया


0

driver.find_element_by_xpath("path").send_keys(Keys.CONTROL + u'\ue003') फ़ायरफ़ॉक्स के साथ बहुत अच्छा काम किया

  • u '\ ue003' मेरे जैसे लोगों के लिए एक BACK_SPACE है - इसे कभी याद न रखें)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.