2013-03-12 2 views
12

ich in ein Problem lief, während sie von firefoxdriver Schalte mit Selen chromedriver war es funktioniert in FF in Ordnung, aber jetzt, wenn ich versuche, ein Datum Eingabefeld löschen Ich habe diesen Fehler:Löschen date Eingabe auf chromewebdriver nicht

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... 

ich versuchte, das contenteditable Attribut auf meine Eingabefelder hinzugefügt, aber keine da Glück:

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

ich bin nicht sicher, ob ich das mitteilen oder wo es zu berichten, aber ich fand diese Probleme in verwandten Projekten, die etwas ähnlich:

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

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

In der Zwischenzeit irgendwelche Vorschläge um diesen Fehler zu bekommen?

Ren

+0

Anscheinend ist dies wegen der Chromaedriver nicht genug reif genug. Hoffentlich wird dies in Zukunft behoben werden. – Renaud

Antwort

9

Als Abhilfe können Sie die webElement wählen Sie das Eingabefeld darstellt, und führen Sie eine

webElement.SendKeys(Keys.Delete);

das Feld zu löschen.

+0

Wie erfolgt die Auswahl? –

+0

Ich bekomme "Schlüssel ist nicht definiert". Ist "Keys" ein Platzhalter für eine benutzerdefinierte Variable, die ich einfügen soll? – Vince

+0

@Vince: Der Namespace ist 'OpenQA.Selenium.Keys' – Robert

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

Ich habe eine Lösung, die ich gerade in meinem ChromeDriver-Projekt in Eclipse verwendet habe. Es ist auch eine Arbeit herum.

Ich fand, dass einfach mit {webElement.Keys} nur gelöschte Teile des Textes im Eingabefeld. Sie müssen also zuerst mit der linken Pfeiltaste den gesamten zu löschenden Text auswählen.

Der folgende Code sollte in ChromeDriver funktionieren. Es ist in Java (mit Eclipse):

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

Manchmal kann man den XPath ein wenig ändern und auf den Punkt, dass es funktioniert:

Zum Beispiel für dieses Stück von DOM: <tr class="table-filters"><td><input type="text" value=""></td></tr>

wenn Sie verwenden:

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

es wird nicht funktionieren, aber:

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

Funktioniert.