2013-03-12 4 views
12

Я столкнулся с проблемой при переходе от firefoxdriver к chromedriver с селеном, это работает отлично в FF, но теперь, когда я пытаюсь очистить поле ввода даты у меня есть эта ошибка:Очистить ввод даты не будет работать на 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

В то же время какие-либо предложения, чтобы обойти эту ошибку?

Ren

+0

По-видимому, это связано с тем, что хромированный рельеф не достаточно зрелый. Надеюсь, это будет исправлено в будущем. – Renaud

ответ

9

В качестве временного решения можно выбрать webElement, представляющий поле ввода и выполнить

webElement.SendKeys(Keys.Delete);

, чтобы очистить поле.

+0

Как сделать выбор? –

+0

Я получаю «Ключи не определены». Является ли «Keys» заполнителем для некоторой пользовательской переменной, которую я должен вставить? – Vince

+0

@Vince: пространство имен - это 'OpenQA.Selenium.Keys' – Robert

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

У меня есть решение, которое я только что использовал в своем проекте ChromeDriver в Eclipse. Это тоже работа.

Я обнаружил, что просто с помощью {webElement.Keys} удалена только часть текста в поле ввода. Поэтому сначала вы должны использовать клавишу со стрелкой влево, чтобы выбрать весь текст для удаления.

Следующий код должен работать в ChromeDriver. Он находится в Java (с помощью 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

Иногда вы можете изменить XPath немного и добраться до точки, что это работает:

Например, для этой части DOM: <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(); 

Работы.