Ответ 1
В качестве обходного пути вы можете выбрать webElement, представляющий поле ввода, и выполнить
webElement.SendKeys(Keys.Delete);
чтобы очистить поле.
Я столкнулся с проблемой при переходе с firefoxdriver на chromedriver с селеном, он отлично работал в FF, но теперь, когда я пытаюсь очистить поле ввода даты, у меня есть эта ошибка:
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
В то же время любые предложения по обходу этой ошибки?
Рен
В качестве обходного пути вы можете выбрать webElement, представляющий поле ввода, и выполнить
webElement.SendKeys(Keys.Delete);
чтобы очистить поле.
Иногда вы можете немного изменить 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();
Works.
welement.click
Actions action = new Actions(driver);
action.sendKeys(Keys.DELETE);
action.sendKeys(webelement,value).build().perform();
У меня есть решение, которое я только что использовал в своем проекте 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();