codeceptjs - 为什么条件代码没有在 CodeceptJS 中执行?
问题描述
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"]")
我在这里错过了什么吗?或者有没有其他方法可以做到这一点?蒂亚!
解决方案
if 语句中的代码正在执行。您可以在日志中看到它:elementToClick inside if - //mat-checkbox[@formcontrolname="chkBxEnabled"]
里面I
的方法不执行。
没有I
in 助手。如果您查看自定义帮助文档,则其中没有I
使用。
而不是它使用this.helpers.<helper name with method>.<method>
,例如this.helpers.WebDriver.wait(2)
作为替代。也许(未经测试),const {I} = inject();
在帮助文件的开头会帮助你。
推荐阅读
- ios - 如何在 UITableView 中正确移动和删除行?
- c# - 如何在asp.net中将布局呈现为字符串?
- sas - 基于值的 SAS 串联
- ios - WebRTC - iOS Swift - 删除视频流并将 uiview 设置为黑色
- java - 在 java 中使用 javaStreamingContext 上下文实现多线程时的问题
- android - 无法解决:com.android.databinding:library:3.1.2
- windows - 验证用户输入是几个允许的单词之一
- android - 使用其 USB id 在特定设备上运行 CTS
- android -
- sql - 具有可变参数 varchar 输入和可变参数整数输出的 SQL 函数