13

セレンを使用して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

それまでの間、そのバグを回避するための提案はありますか?

レン

4

5 に答える 5

10

回避策として、入力フィールドを表す webElement を選択して、

webElement.SendKeys(Keys.Delete);

フィールドをクリアします。

于 2013-05-06T02:49:14.993 に答える
2

場合によっては、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();

動作します。

于 2015-12-03T23:28:35.793 に答える
0
welement.click 
Actions action = new Actions(driver); 
action.sendKeys(Keys.DELETE);
action.sendKeys(webelement,value).build().perform();
于 2013-09-11T06:39:33.623 に答える
0

Eclipse の ChromeDriver プロジェクトで使用したばかりの解決策があります。これは回避策でもあります。

{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();
于 2015-08-17T20:20:45.410 に答える