Nightwatch JS - IF Else IF断言

Nightwatch JS - IF Else IF assertion

我是 Javascript( Nightwatch JS ) 和一般编程的新手。

我的 If 、 Else If 、 Else 测试用例有一个问题, 没有 继续执行 Else If 语句。

我认为这是因为我的 IF 语句中的条件是断言 ( .expect.element(); )

我想知道是否有人可以指导我如何处理我的 IF 语句。

本质上我想验证一下:

If (checkbox is un-clickable) {
run set code; 
} Else if (this checkbox is clickable) {  
run set code;
} Else { 
.end();
}

这是我做的样本测试。

    ' Uninstall Missions Module ' : function(uninstallModule) {
     uninstallModule
       .url('http://drupal8.develop:8091/admin/modules/uninstall')
       .setValue('#edit-text', "Missions")
       .pause(800);
       uninstallModule.expect.element('#edit-uninstall-missions').to.be.present;
       uninstallModule.waitForElementVisible('//*[@id="system-modules-uninstall"]/table/tbody/tr[31]/td[3]/div/div/ul/li/a', 1000, false);


     if (uninstallModule.expect.element('#edit-uninstall-missions').to.not.be.enabled) {
      uninstallModule.expect.element('body').text.to.contain('Remove mission entities')
      uninstallModule
        .url('http://drupal8.develop:8091/admin/modules/uninstall/entity/mission')
              .verify.urlEquals('http://drupal8.develop:8091/admin/modules/uninstall/entity/mission');
            uninstallModule.expect.element('body').text.to.contain('Are you sure you want to delete all mission entities?');
            uninstallModule.click('xpath', '//*[@id="edit-submit"]');
            uninstallModule
              .pause(10000)
              .verify.visible("body > div.layout-container > main > div.region.region-highlighted > div > h2", "All mission entities have been deleted.");

     } else if (uninstallModule.expect.element('#edit-uninstall-missions').to.be.enabled) {
      uninstallModule
        .url('http://drupal8.develop:8091/admin/modules/uninstall')
           .setValue('#edit-text', "Missions");
         uninstallModule.click('#edit-uninstall-missions');
         uninstallModule.pause(800);
         uninstallModule.verify.urlEquals("http://drupal8.develop:8091/admin/modules/uninstall/confirm");
         uninstallModule.click('xpath', '//*[@id="edit-submit"]');
         uninstallModule.pause(1000);
         uninstallModule.verify.visible('body > div.layout-container > main > div.region.region-highlighted > div.messages.messages--status', "The selected modules have been uninstalled.");

     } else {
      uninstallModule.end();

     }

    },  
}

关于 nightwatch(和其他端到端测试框架)有两点需要了解

  1. 所有操作都是异步的。即使代码可以通过框架看起来是同步的,但最终,一切都是异步的。 读取值 也需要异步代码。
  2. 使用期望值时,如果期望值未被验证,代码会抛出错误;你不能用它们来读取值。

有了nightwatch,你可以使用getAttribute来读取你需要的值:

client.getAttribute('#edit-uninstall-missions', 'enabled', result => {
  // I'm not sure about the type returned in result.value
  // you can test it and adjust
  const enabled = result && result.value !== "false" 
                    && result.value !== false;

  if (enabled){
    // Continue your test here
  } else {
    // Another test here
  }
});

这是我所做的。

    uninstallModule.getAttribute('#edit-uninstall-missions', 'disabled', function(results) {

          console.log(results.value);
          if (results.value == "true") {
            console.log("It's true bro");
          } else if (results.value != "true") {
            console.log ("It's null");
          } else {
            console.log("It's Neither");
          }
    });