【问题标题】:How to break out of a while loop and if statement?如何打破while循环和if语句?
【发布时间】:2018-08-30 07:21:14
【问题描述】:

当 if 语句中的值大于 0 时,我需要同时中断 while 循环和 if 语句,然后代码应该从 while 循环中中断。

我怎样才能做到这一点?

我的代码如下:

it('x Accordion description should appear after 5 seconds upon being clicked', function(done) {
      //this.timeout(15000);
      //setTimeout(done, 6000);
      var i = 0;
      while (i < 15000) {
          browser.click('#accordion');
          //var timeoutText = browser.getText('#timeout').length;
          var timeoutText = browser.getText('#timeout').length;
          console.log(timeoutText);

            if (timeoutText > 0) {
                  browser.pause(5000);
                  console.log("Pass");
                  break;
                  i++;
            }
      }

感谢您的帮助。

【问题讨论】:

  • 你的循环是正确的它应该跳出 while ,我唯一能弄清楚的是尝试在 if 条件之外增加 i (i++) 。
  • 感谢您的帮助 @Akshay Aggarwal 在 if 语句之外添加 i 就可以了。
  • 如果评论对您有帮助,请点赞 ;-)
  • 对不起,我是 * 的新手,我该如何更新您的上述评论? :)

标签: javascript if-statement webdriver-io


【解决方案1】:

使用label 突破

 outer: while (i < 15000) {
    browser.click('#accordion');
    //var timeoutText = browser.getText('#timeout').length;
    var timeoutText = browser.getText('#timeout').length;
    console.log(timeoutText);

    if (timeoutText > 0) {
        browser.pause(5000);
        console.log("Pass");
        break outer;
        i++;
    }
}

【讨论】:

  • 感谢您的帮助,在 if 语句之外添加 i++ 就成功了。
【解决方案2】:

将条件添加到 while 语句是否有效?

it('x Accordion description should appear after 5 seconds upon being clicked', function(done) {
      //this.timeout(15000);
      //setTimeout(done, 6000);
      var i = 0;
      var timeoutText = 1;
      while (i < 15000 && timeoutText <= 0) {
          browser.click('#accordion');              
          timeoutText = browser.getText('#timeout').length;
          console.log(timeoutText);

            if (timeoutText > 0) {
                  browser.pause(5000);
                  console.log("Pass");
                  i++;
            }
      }

另外,如果您不需要运行 while 循环,这可以更简单地编写,例如。

it('x Accordion description should appear after 5 seconds upon being clicked', function(done) {
      //this.timeout(15000);
      //setTimeout(done, 6000);
      var i = 0;
      var timeoutText = browser.getText('#timeout').length;
      while (i < 15000 && timeoutText <= 0) {
          browser.click('#accordion');              
          timeoutText = browser.getText('#timeout').length;
          console.log(timeoutText);
          browser.pause(5000);
          console.log("Pass");
          i++;
      }

【讨论】:

    【解决方案3】:
    it('x Accordion description should appear after 5 seconds upon being clicked', function() {
        // http://webdriver.io/api/utility/waitUntil.html
        browser.waitUntil(function () {
          // Your condition to wait:
          browser.click('#accordion');
          return browser.getText('#timeout').length > 0
        }, 
        15200, // Waiting timeout 15 secs, but actually only 3 clicks will be done
        'expected accordion description should appear after 5 seconds upon being clicked', 
        5000) // Pooling interval - each 5 secs
    }
    

    【讨论】: