web-dev-qa-db-ja.com

sendKeys()の代わりに入力の値を設定する-Selenium webdriver nodejs

テストする長い文字列があり、sendKeys()に時間がかかりすぎます。 textの値を設定しようとすると、プログラムがクラッシュします。 Selenium sendKeys()が実際のユーザー入力をテストする最良の方法であることは知っていますが、私のアプリケーションにとっては時間がかかりすぎます。だから私はそれを避けようとしています。

すぐに値を設定する方法はありますか?

この簡単な例を参照してください。

var webdriver = require('Selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
      build();

driver.get('http://www.google.com');

// find the search input field on google.com
inputField = driver.findElement(webdriver.By.name('q'));

var longstring = "test"; // not really long for the sake of this quick example

// this works but is slow
inputField.sendKeys(longstring);

// no error but no values set
inputField.value = longstring;

// Output: TypeError: Object [object Object] has no method 'setAttributes'

inputField.setAttributes("value", longstring);
32
F. Rakes

executeScriptメソッドを使用して要素の値を設定してみてください。

webdriver.executeScript("document.getElementById('elementID').setAttribute('value', 'new value for element')");
47
Andrey Egorov

.executeScript()を使用してAndrey-Egorovの正解から拡張して、私自身の質問例を終了します。

inputField = driver.findElement(webdriver.By.id('gbqfq'));
driver.executeScript("arguments[0].setAttribute('value', '" + longstring +"')", inputField);
9
F. Rakes

Andrey Egorovに感謝します。私の場合、python setAttributeは機能しませんが、プロパティを直接設定できることがわかりました。

このコードを試してください:

driver.execute_script("document.getElementById('q').value='value here'")
8
Larry Song

多数の繰り返し文字をテキストフィールドに送信する別の方法(たとえば、フィールドで許可される最大文字数をテストするため)は、いくつかの文字を入力して、繰り返しコピーして貼り付けることです。

inputField.sendKeys('0123456789');
for(int i = 0; i < 100; i++) {
    inputField.sendKeys(Key.chord(Key.CONTROL, 'a'));
    inputField.sendKeys(Key.chord(Key.CONTROL, 'c'));
    for(int i = 0; i < 10; i++) {
        inputField.sendKeys(Key.chord(Key.CONTROL, 'v'));
    }
}

残念ながらIEに対してCTRL [を押すことは、REQUIRE_WINDOW_FOCUSが有効になっていない限り機能しないようです(他の問題を引き起こす可能性があります)が、FirefoxおよびChromeでは正常に機能します。

3
Dave

Andrey-Egorovとこれ answer のおかげで、C#でなんとかできました

IWebDriver driver = new ChromeDriver();
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string value = (string)js.ExecuteScript("document.getElementById('elementID').setAttribute('value', 'new value for element')");
2
Leojet
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("document.querySelector('attributeValue').value='new value'");
0
Rakesh