Avec webdriver.js, comment obtenir l'option sélectionnée d'un <select>?

Beaucoup de réponses pour java et C #, mais je ne peux pas trouver comment le faire en javascript. On dirait que l'API est différente …

Oui, c'est possible. Disons que nous avons l'élément sélectionné suivant:

<select name="test" id="select"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> 

Vous obtenez l'option sélectionnée actuelle en utilisant getValue et vous pouvez modifier la sélection à l'aide d'un clic. Voici un exemple simple:

 var webdriverjs = require('webdriverjs'), client = webdriverjs.remote({desiredCapabilities:{browserName:'phantomjs'}}).init(); client .url('http://localhost:8080') .getValue('#select',function(err,val){ console.log(val); // will output "1" }) .click('//*[@id="select"]/option[3]') .getValue('#select',function(err,val){ console.log(val); // will output "3" }) .end(); 

J'espère que cela pourra aider.

à votre santé

Pour ceux qui recherchent simplement une solution WebDriverJS pure et pas un cadre spécifique comme webdriver.io ou protractor, voici le code,

 var element = driver.findElement(wd.By.id('mySelect')); element.getAttribute('value').then(function(selected) { if(selected === 'the one I expected') { done(); } else { done(new Error('something went wrong'); } }); 

Si vous voulez l'élément d'option, utilisez la valeur de retour du rappel:

 driver.findElement(By.css('select[name=eventTypes]')) .then((select) => { return select.getAttribute('value').then((value) => { return {select: select, value: value}; }); }) .then((data) => { return data.select.findElement(By.css('option[value="'+data.value+'"]')); }) .then((option) => { //do something. }); 

Si vous avez ceci dans votre html pour un exemple

 <select name="test" id="myId"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> 

Vous pouvez sélectionner un exemple d'option 3 comme celui-ci

 var driver = new firefox.Driver(); driver.findElement(By.css('#myId>option:nth-child(2)')).click(); 

Fonctionne pour moi et j'utilise le sélénium-webdriver avec JavaScript