使用webdriver.js,如何获取<select>元素的选定选项?

3

对于Java和C#有很多答案,但我找不到如何在JavaScript中实现。似乎API是不同的...

6个回答

5

是的,这是可能的。假设我们有以下选择元素:

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

您可以使用getValue获取当前选择的选项,使用click更改选择。以下是一个简单的示例:
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();

希望这能有所帮助。祝好!

1
+1 但这是特定于框架的,然而这个想法是正确的并且帮助我朝着正确的方向前进。对于那些对纯WebDriver解决方案感兴趣的人,请查看我的答案。 - nilesh

3

对于那些只寻求纯粹的WebDriverJS解决方案,而不是任何框架特定的解决方案,比如webdriver.io或protractor的人,这里是代码:

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

var SelectedValue = element.getAttribute('value').then(function(selected) { return selected;}); - M.Nadeem

2
如果您想要选项元素,请使用 then 回调函数的返回值:
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.
  });

2
如果您的 HTML 中有以下示例:
<select name="test" id="myId">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

您可以像这样选择例如选项3。
var driver = new firefox.Driver();
driver.findElement(By.css('#myId>option:nth-child(2)')).click();

这对我来说很有效,我正在使用JavaScript的selenium-webdriver。


请添加解释,以便其他人可以理解为什么它有效。谢谢。 - rsjaffe
谢谢!我尝试了很多其他方法来做这件事,但这是唯一一个真正起作用的方法。 - Gennon

0

我用了这个

element=await driver.findElement(By.name("quantity")); // here you have to select your element suppose i am using get element by name


// below will help you to get selected value from select option
var SelectedValue=element.getAttribute('value').then(function(selected) { return selected;}); 

0

虽然这个问题已经发布了7年,但我想分享一下我的答案,它现在仍然有效。您可以通过以下方式获取所选选项/值

let select_value =  await driver.findElement(By.css('select')).getAttribute('value')

您可能希望指出这与原贴发布者发布的答案本质上是相同的。此答案使用了await,而原贴发布者则使用了promise连续体。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接