量角器在预期条件错误后未失败当前规格
Protractor not failing current spec after expected condition error
在量角器上执行规范时,我注意到我的一些条件在失败时,规范被标记为通过但它应该失败。我的 async/await 方法可能有问题,需要有人向我指出为什么我没有将规范视为失败以及如何修复它。
static async SelectDocument(){
try{
let docXpath = 'this is an error on purpose. it is not showing as fail in the specs. Why?';
let docElement = element(by.xpath(docXpath));
await browser.wait(.EC.vidibilityOf(docElement),3000);//code stops here but spec is not mark as fail.
await browser.sleep(1000);
docElement.click();
}catch(e){
await logger.log().error(e)}
}
}
输出:
@维克多
在任何时候,'TRY' 块中的任何步骤都失败,执行进入 'CATCH' 块并从中执行步骤。
try-catch 的目的是,如果 try 中有任何失败,执行将进入 catch 块并且不会终止代码。
您需要将您的代码从 try 块中取出然后执行,您将看到它在哪里失败以及什么是失败,您还将看到失败计数。
https://www.w3schools.com/python/python_try_except.asp
我看到的另一个错误是 xpath:
let docElement = element(by.xpath("//locatorTag[contains(text(), docXpath)]")
这里 'locatorTag' 将是您的 html 标签,其中包含特定文本
还有一点:
脚本报告任何断言失败而不是语句失败。
在这里(在您的屏幕截图中突出显示),您目前遇到的是语句失败。
感谢@Gaurav Lad,我能够找到解决方案。
我不知道他上面提到的:“脚本报告任何断言失败而不是语句失败。”
多亏了这条评论,我才能够包装预期的可见性条件,然后做出一个成功地不符合规范的断言。我的测试中没有更多的静默错误!
static async ExpectVisibilityByElement(Elem: ElementFinder, waitTime?: number) {
{
let wait = 3000
if (waitTime != undefined) {
wait = waitTime;
}
let output;
let errorObject;
try {
await browser.wait(EC.visibilityOf(Elem), wait);
await logger.Log().info("Element " + Elem.locator() + " is visible.");
output = true;
} catch (error) {
output = false;
errorObject = error;
await logger.Log().error(error);
}
expect(output).toBe(true,Elem.locator()+ 'is not visible.')
if(!output) {
await logger.Log().error('SPEC FAILED. The rest of the spec will not be excecuted.');
throw errorObject.name +': '+ errorObject.message;
}
}
};
在量角器上执行规范时,我注意到我的一些条件在失败时,规范被标记为通过但它应该失败。我的 async/await 方法可能有问题,需要有人向我指出为什么我没有将规范视为失败以及如何修复它。
static async SelectDocument(){
try{
let docXpath = 'this is an error on purpose. it is not showing as fail in the specs. Why?';
let docElement = element(by.xpath(docXpath));
await browser.wait(.EC.vidibilityOf(docElement),3000);//code stops here but spec is not mark as fail.
await browser.sleep(1000);
docElement.click();
}catch(e){
await logger.log().error(e)}
}
}
输出:
@维克多 在任何时候,'TRY' 块中的任何步骤都失败,执行进入 'CATCH' 块并从中执行步骤。
try-catch 的目的是,如果 try 中有任何失败,执行将进入 catch 块并且不会终止代码。
您需要将您的代码从 try 块中取出然后执行,您将看到它在哪里失败以及什么是失败,您还将看到失败计数。
https://www.w3schools.com/python/python_try_except.asp
我看到的另一个错误是 xpath:
let docElement = element(by.xpath("//locatorTag[contains(text(), docXpath)]")
这里 'locatorTag' 将是您的 html 标签,其中包含特定文本
还有一点: 脚本报告任何断言失败而不是语句失败。 在这里(在您的屏幕截图中突出显示),您目前遇到的是语句失败。
感谢@Gaurav Lad,我能够找到解决方案。
我不知道他上面提到的:“脚本报告任何断言失败而不是语句失败。”
多亏了这条评论,我才能够包装预期的可见性条件,然后做出一个成功地不符合规范的断言。我的测试中没有更多的静默错误!
static async ExpectVisibilityByElement(Elem: ElementFinder, waitTime?: number) {
{
let wait = 3000
if (waitTime != undefined) {
wait = waitTime;
}
let output;
let errorObject;
try {
await browser.wait(EC.visibilityOf(Elem), wait);
await logger.Log().info("Element " + Elem.locator() + " is visible.");
output = true;
} catch (error) {
output = false;
errorObject = error;
await logger.Log().error(error);
}
expect(output).toBe(true,Elem.locator()+ 'is not visible.')
if(!output) {
await logger.Log().error('SPEC FAILED. The rest of the spec will not be excecuted.');
throw errorObject.name +': '+ errorObject.message;
}
}
};