J'ai une longue chaîne à tester et sendKeys()
prend trop de temps. Lorsque j'ai essayé de définir la valeur de text
, le programme s'est arrêté. Je sais que Selenium sendKeys()
est le meilleur moyen de tester la saisie de l'utilisateur, mais pour mon application, cela prend trop de temps. Alors j'essaie de l'éviter.
Est-il possible 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);
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')");
Étendre à partir de la réponse correcte de 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);
Merci à Andrey Egorov, dans mon cas avec python setAttribute
ne fonctionne pas, mais j'ai constaté que je pouvais définir la propriété directement,
Essayez ce code:
driver.execute_script("document.getElementById('q').value='value here'")
Une autre façon d’envoyer un grand nombre de caractères répétés dans un champ de texte (par exemple, pour tester le nombre maximal de caractères autorisé par le champ) consiste à taper quelques caractères, puis à les copier et 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
est activé (ce qui peut causer d’autres problèmes), mais cela fonctionne bien pour Firefox et Chrome.
Merci à Andrey-Egorov et ceci réponse , j'ai réussi à le faire en C #
IWebDriver driver = new ChromeDriver();
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
string value = (string)js.ExecuteScript("document.getElementById('elementID').setAttribute('value', 'new value for element')");
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("document.querySelector('attributeValue').value='new value'");