【问题标题】:webdriverio Loop through options in select elementwebdriverio 循环选择元素中的选项
【发布时间】:2018-07-20 15:11:45
【问题描述】:

示例 HTML:

<select id="random_text">
    <option value="option1">asadka_TEST</option>
    <option value="option2">Peter Parker</option>
    <option value="option3">Clark Kent</option>
    <option value="option4">aldkfsd_TEST</option>
</select>

类中的Javascript代码

class TestPage extends Page {

    get fullNameSelect() {return browser.element('#random_text');}

    iterateAndSelect() {
        this.fullNameSelect.value.ForEach() //pseudo code
    }
}

我希望 iterateAndSelect 函数遍历所有选项并选择以 "_TEST" 结尾的第一个选项。

到目前为止,我只弄清楚selectByVisibleText 操作,但问题是我想根据值以“_TEST”字符串结尾的条件选择选项,并且这个动作我必须提供确切的值。

【问题讨论】:

  • 我不熟悉 Java 脚本,但如果你想要 xpath ,你可以试试这个//option[ends-with(text(),'TEST')]

标签: javascript loops selenium foreach webdriver-io


【解决方案1】:

最简单的方法是找到以_TEST结尾的第一个选项的索引:

const index = browser.getElements('option').findIndex(option => {
    return option.getText().endsWith('_TEST')
});

然后您可以使用该索引选择该值:

browser.getElement('select').selectByIndex(index);

【讨论】:

    【解决方案2】:

    这是一个简单的方法。

    // get all options
    const options = document.getElementById('random_text').children
    // filter key test options
    const tests = Object.keys(options).filter( i => options[i].text.indexOf('_TEST') > 0)
    // run tests here
    tests.map(i => {
      console.log(options[i].text)
    })
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width">
      <title>JS Bin</title>
    </head>
    <body>
      <select id="random_text">
        <option value="option1">asadka_TEST</option>
        <option value="option2">Peter Parker</option>
        <option value="option3">Clark Kent</option>
        <option value="option4">aldkfsd_TEST</option>
      </select>
    </body>
    </html>

    【讨论】:

      【解决方案3】:

      这是您想尝试的 Webdriverio 代码:

      class TestPage extends Page {
      
        get fullNameSelect() {return browser.elements("option");}
      
        iterateAndSelect() {
             var arr=[];
      
           this.fullNameSelect.value.forEach(function(elem) {
      
           var text=browser.elementIdText(elem.ELEMENT).value;
           if(text.endsWith('_TEST')) {
              arr.push(text); 
           }
           console.log(arr); // all texts that ends with _TEST
          });
       }
         }
      module.exports = new TestPage();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-09
        • 2012-06-19
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        相关资源
        最近更新 更多