Définir la valeur de l'entrée au lieu de sendKeys () - selenium webdriver nodejs

j'ai une longue chaîne à tester et sendKeys() prend trop de temps. Quand j'ai essayé de définir la valeur du text le programme s'écrase. Je sais que le Sélénium sendKeys() est la meilleure façon de tester la réelle entrée de l'utilisateur, mais pour mon application, il prend trop de temps. Donc, je suis en train d'essayer de l'éviter.

Est-il un moyen de définir la valeur immédiatement?

voir cet exemple rapide:

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);
28
demandé sur iamsankalp89 2014-08-30 18:52:13

5 réponses

essayez de définir la valeur de l'élément en utilisant la méthode executeScript :

webdriver.executeScript("document.getElementById('elementID').setAttribute('value', 'new value for element')");
39
répondu Andrey Egorov 2016-08-29 11:13:43

S'étendant de la réponse correcte D'Andrey-Egorov en utilisant .executeScript() pour conclure mon propre exemple de question:

inputField = driver.findElement(webdriver.By.id('gbqfq'));
driver.executeScript("arguments[0].setAttribute('value', '" + longstring +"')", inputField);
7
répondu F. Rakes 2014-08-31 02:55:53

merci à Andrey Egorov, dans mon cas avec python setAttribute ne fonctionne pas, mais j'ai trouvé que je peux définir la propriété directement,

essayez ce code:

driver.execute_script("document.getElementById('q').value='value here'")
7
répondu Larry Song 2017-09-01 06:47:58

une autre façon d'envoyer un grand nombre de caractères répétitifs à un champ de texte (par exemple pour tester le nombre maximum de caractères que le champ permettra) est de taper quelques caractères puis de les copier et de les coller à plusieurs reprises:

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'));
    }
}

malheureusement, appuyer sur CTRL ne semble pas fonctionner pour IE à moins que REQUIRE_WINDOW_FOCUS ne soit activé (ce qui peut causer d'autres problèmes), mais cela fonctionne très bien pour Firefox et Chrome.

3
répondu Dave 2016-02-04 17:19:46

grâce à Andrey-Egorov et ce réponse , j'ai réussi à le faire dans C#

IWebDriver driver = new ChromeDriver();
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string value = (string)js.ExecuteScript("document.getElementById('elementID').setAttribute('value', 'new value for element')");
2
répondu Leojet 2017-10-19 20:39:24