【问题标题】:Why the conditional code is not getting executed in CodeceptJS?为什么条件代码没有在 CodeceptJS 中执行?
【发布时间】:2020-01-03 00:05:24
【问题描述】:

CodeceptJS - 我需要选中一个复选框,前提是它还没有被选中。

我创建了一个辅助方法来检查条件,它返回了正确的值,但是 if 语句中的代码没有被执行。

助手类/方法:

class CommonHelper {
    async clickIfPresent(elementToCheck, elementToClick, conditionCheck){
        try {
          const numVisible =  await I.grabNumberOfVisibleElements(elementToCheck);
          console.info('grab numVisible - ', numVisible, ', conditionCheck - ', conditionCheck);
          if (numVisible === conditionCheck) {
              console.info('elementToClick inside if - ', elementToClick);        
              I.click(elementToClick);
              I.wait(2);
      }
    } catch (err) {
      console.log('Skipping operation as element is not visible');
    }
}

module.exports = new CommonHelper();

方法调用:

Class EnableCheckbox {
const checkboxState = '//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]';
const checkboxTag = '//mat-checkbox[@formcontrolname="chkBxEnabled"]';

enableCheckboxIfPresent(){
    commonHelper.clickIfPresent(checkboxState, checkboxTag, 0);
    I.seeElement(checkboxState);
  }
}   

我看到了 if 语句中的代码 step.before、step.after,但它没有被执行:

Emitted | step.start (I grab number of visible elements "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")
  CommonHelper: clickIfPresent 
    I grab number of visible elements "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]"
Emitted | step.passed (I grab number of visible elements "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")
Emitted | step.finish (I grab number of visible elements "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")
grab numVisible -  0 , conditionCheck -  0
elementToClick inside if -  //mat-checkbox[@formcontrolname="chkBxEnabled"]
Emitted | step.before (I click "//mat-checkbox[@formcontrolname="chkBxEnabled"]")
Emitted | step.after (I click "//mat-checkbox[@formcontrolname="chkBxEnabled"]")
Emitted | step.before (I wait 2)
Emitted | step.after (I wait 2)
Emitted | step.start (I see element "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")
  EnableCheckbox: enableCheckboxIfPresent 
    I see element "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]"
    › [SmartWait (20000ms)] Locating //mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"] in 20000
[1] Error | Error: Element "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]" was not found by text|CSS|XPath
Emitted | step.failed (I see element "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")
Emitted | step.finish (I see element "//mat-checkbox[@formcontrolname="chkBxEnabled"]//input[@aria-checked="true"]")

我在这里遗漏了什么吗?或者有没有其他方法可以做到这一点?蒂亚!

【问题讨论】:

    标签: codeceptjs


    【解决方案1】:

    if 语句中的代码正在执行。你可以在日志中看到它:elementToClick inside if - //mat-checkbox[@formcontrolname="chkBxEnabled"]

    I 内的方法不会被执行。

    助手中没有I。 如果您查看custom helper docs,其中没有使用I

    而不是它使用this.helpers.<helper name with method>.<method>,例如this.helpers.WebDriver.wait(2)

    作为替代。也许(未测试),帮助文件开头的const {I} = inject(); 会帮助你。

    【讨论】:

    • 感谢您的回答。如果这很明显,我没有得到它,请原谅我。 “I.grabNumberOfVisibleElements(elementToCheck);”怎么来的?正在这个方法中执行吗?
    • 如果你使用WebDriver helper,那么this.helpers.WebDriver. grabNumberOfVisibleElements(elementToCheck);
    猜你喜欢
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多