javascript - Nightwatch JS - IF Else IF 断言

标签 javascript if-statement nightwatch.js

我对 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(和其他 e2e 测试框架)有两件事需要了解

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

关于javascript - Nightwatch JS - IF Else IF 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621841/

相关文章:

javascript - 是否有使用不可等分值的 jquery slider 的插件或示例?

javascript - 使用 Lazysizes RIaS 插件有条件地更改数据大小的输出

if-statement - COBOL 程序中的语法错误,如果发生意外

javascript - 夜间值类。单击带有文本的元素

javascript - 正则表达式字符串与管道不匹配

swift - 这是什么意思? #if !(arch(x86_64) || arch(arm64))

delphi - Delphi的任何版本都警告if-else缩进不平衡吗?

javascript - 右键单击守夜人

node.js - 通过 Jenkins CI 在 Docker 容器中运行 Selenium 测试的最简单方法

javascript - 正则表达式 : only match word if it doesn't start with a dot