2013-03-12 8 views
12

मैं firefoxdriver से स्विच जबकि सेलेनियम के साथ chromedriver को कोई समस्या हुई थी पर विफल रहता है, यह एफएफ में ठीक काम कर रहा था, लेकिन अब जब मैं एक तारीख इनपुट क्षेत्र को साफ करने की कोशिश मैं इस त्रुटि है:साफ़ तारीख इनपुट chromewebdriver

Caused by: org.openqa.selenium.InvalidElementStateException: Element must be user-editable 
in order to clear it. (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 38 milliseconds 
Build info: version: '2.31.0', revision: '1bd294d185a80fa4206dfeab80ba773c04ac33c0', 
time: '2013-02-27 13:51:26' 
System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.8.2', java.version: 
'1.6.0_41' 
Session ID: cb5a1b7e5f4abc4f2e56e2fe284a9dc3 
Driver info: org.openqa.selenium.chrome.ChromeDriver 
Capabilities [{platform=MAC, chrome.chromedriverVersion=26.0.1383.0, acceptSslCerts=false, 
javascriptEnabled=true, browserName=chrome, rotatable=false, locationContextEnabled=false, 
version=25.0.1364.160, cssSelectorsEnabled=true, databaseEnabled=false, 
handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, 
webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}] 
blah blah... 

मैं अपने इनपुट क्षेत्रों के लिए contenteditable विशेषता लेकिन कोई किस्मत जोड़ने का प्रयास:

<input type="date" contenteditable="true" required="required" placeholder="YYYY-MM-dd" /> 

मुझे यकीन है कि अगर मैं उस रिपोर्ट करना चाहिए नहीं कर रहा हूँ या जहां यह रिपोर्ट करने के लिए, लेकिन मैं संबंधित परियोजनाओं में इन मुद्दों में पाया गया कि कुछ इसी तरह:

https://github.com/jnicklas/capybara/issues/554

https://github.com/Behat/MinkSelenium2Driver/pull/29

इस बीच किसी भी सुझाव है कि बग से बचने के लिए?

रेन

+0

जाहिर है यह क्रोमरेड्रिवर पर्याप्त परिपक्व नहीं होने के कारण है। उम्मीद है कि यह भविष्य में तय हो जाएगा। – Renaud

उत्तर

9

समाधान के लिए आप webElement इनपुट क्षेत्र का प्रतिनिधित्व करने वाले चयन करें और एक

webElement.SendKeys(Keys.Delete);

क्षेत्र खाली करने के लिए प्रदर्शन कर सकते हैं।

+0

तब चयन कैसे किया जाता है? –

+0

मुझे "कुंजी परिभाषित नहीं है" मिल रहा है। कुछ कस्टम चर के लिए "कुंजी" प्लेसहोल्डर है जो मुझे डालना चाहिए? – Vince

+0

@ विन्स: नेमस्पेस 'OpenQA.Selenium.Keys' है – Robert

0
welement.click 
Actions action = new Actions(driver); 
action.sendKeys(Keys.DELETE); 
action.sendKeys(webelement,value).build().perform(); 
0

मेरे पास इसका समाधान है कि मैंने अभी ग्रहण में अपने क्रोमड्राइवर प्रोजेक्ट में उपयोग किया है। यह चारों ओर एक काम भी है।

मैंने पाया कि बस {webElement.Keys} का उपयोग केवल इनपुट फ़ील्ड में टेक्स्ट का हटा दिया गया हिस्सा है। तो आपको हटाने के लिए पूरे टेक्स्ट का चयन करने के लिए पहले बाएं तीर कुंजी का उपयोग करना होगा।

निम्नलिखित कोड को ChromeDriver में काम करना चाहिए। यह जावा (ग्रहण का उपयोग) में है:

private WebDriver driver; 
driver= new ChromeDriver(); 
Actions action = new Actions(driver); 
int lenText = driver.findElement(By.xpath(elementLocator)).getText().length(); 

for(int i = 0; i < lenText; i++){ 
    action.sendKeys(Keys.ARROW_LEFT); 
} 
action.build().perform(); 

for(int i = 0; i < lenText; i++){ 
    action.sendKeys(Keys.DELETE); 
} 
Thread.sleep(1000); 
action.build().perform(); 
1

कभी-कभी आप xpath थोड़ा बदल सकते हैं और है कि यह काम करता है बात करने के लिए प्राप्त कर सकते हैं:

डोम के इस टुकड़े के लिए उदाहरण के लिए: <tr class="table-filters"><td><input type="text" value=""></td></tr>

अगर आप का उपयोग करें:

wait.until(ExpectedConditions.visibilityOfElementLocated(By 
        .xpath("//tr[@class='table-filters']//td"))).clear(); 

यह काम नहीं करेगा, लेकिन:

wait.until(ExpectedConditions.visibilityOfElementLocated(By 
        .xpath("//tr[@class='table-filters']//td//input"))).clear(); 

काम करता है।

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