Définir la valeur de l'entrée au lieu de sendKeys() - selenium webdriver nodejs
J'ai une longue chaîne de test et sendKeys()
prend trop de temps. Quand j'ai essayé de définir la valeur de la text
le programme se bloque. 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 ce bref exemple:
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);
- En effet, l'alternative à
sendKeys
serait de définir la valeur de lainput
élément du DOM directement. Cependant, vous manifestez un seul fragment de la façon dont vous essayez de le faire et vous n'expliquez pas comment le programme "plante" exactement. ("Accidents" n'est pas précise du tout.) - Désolé, j'ai mis à jour le message d'Erreur dans l'édition.
- Votre code est toujours en ne montrant que des fragments de la façon dont vous le faites. Vous n'avez pas de montrer comment
input
obtient une valeur. Vous montrez commentinputField
obtient une valeur, mais pasinput
, qui est une variable différente. - C'était malheureusement une faute de frappe. Il devrait être
inputField
tout au long de. Avec.value = longstring
le programme s'exécute bien, mais n'est pas réellement définir la valeur. - Similaire pour Python: Définir l'attribut d'un élément à l'aide de webdriver à SQA
Vous devez vous connecter pour publier un commentaire.
Essayez de définir la valeur de l'élément à l'aide de la
executeScript
méthode:.value = longstring
Erreur:ElementNotVisibleError: element not visible
driver.executeScript("document.getElementById('gbqfq').setAttribute('value','Selenium Web Driver')");
getElementById
et utiliséq
qui était le nom de la inputfield au lieu de la real id. Merci.driver.execute_script("document.getElementById('an_id').setAttribute('value', 'my_username_or_w/e')")
S'étendant à partir de la réponse correcte de Andrey-Egorov à l'aide de
.executeScript()
de conclure à ma propre question exemple:driver.executeScript("arguments[0].setAttribute('value', arguments[1])", inputField, longstring);
driver.executeScript("arguments[0].value = '" + longstring + "'", inputField)
est une autre amélioration possible qui fonctionne également avec les textAreas (je ne l'ai testé sur Chrome, tout de même)Grâce à Andrey Egorov, dans mon cas avec python
setAttribute
ne fonctionne pas, mais je l'ai trouvé, je peux mettre directement la propriété,Essayez ce code:
Une autre façon d'envoyer un grand nombre de répétition des caractères dans un champ de texte (par exemple pour tester le nombre maximum de caractères que le champ va permettre) est de taper quelques caractères et ensuite à plusieurs reprises de les copier et coller:
Malheureusement appuyant sur CTRL ne semble pas fonctionner pour IE moins
REQUIRE_WINDOW_FOCUS
est activé (ce qui peut provoquer d'autres problèmes), mais il fonctionne très bien pour Firefox et Chrome.Grâce à Andrey-Egorov et ce réponse, j'ai réussi à le faire en C#