【问题标题】:assertExists with if-else statement带有 if-else 语句的 assertExists
【发布时间】:2015-09-11 21:36:49
【问题描述】:

我使用这个代码:

var x = require('casper').selectXPath;
...
casper.waitForSelector(x("//a[contains(@id,'cell_13_1')]"), function() {             
    this.test.assertExists(x("//a[contains(@id,'cell_13_1')]"), 'Clickable');
    this.click(x("//a[contains(@id,'cell_13_1')]"));
});

如果第一个元素不存在,我正在尝试使用 if-elseassertExists 来单击另一个元素:

casper.waitForSelector(x("//a[contains(@id,'cell_13_1')]"), function() {          
    if(this.test.assertExists(x("//a[contains(@id,'cell_13_1')]")==="PASS"){
        this.click(x("//a[contains(@id,'cell_11_1')]"));} 
    else{
        this.click(x("//a[contains(@id,'cell_22_1')]"));
    }         
});

但这似乎不起作用。如何正确地做到这一点?

【问题讨论】:

    标签: javascript testing casperjs


    【解决方案1】:

    这正是casper.exists() 的用途。你也可以明确地通过或失败一些事情:

    casper.waitForSelector(x("//a[contains(@id,'cell_13_1')]"), function() {          
        if(this.exists(x("//a[contains(@id,'cell_13_1')]")){
            this.test.pass("Clickable");
            this.click(x("//a[contains(@id,'cell_11_1')]"));
        } else {
            this.test.fail("Clickable");
            //this.click(x("//a[contains(@id,'cell_22_1')]"));
        }       
    });
    

    这段代码相当于你的第一个sn-p。注释 fail() 调用并取消注释最后一次单击以获得您的“预期”行为。

    顺便说一句,使某些断言失败并继续执行脚本是没有意义的。您必须考虑到底要测试什么,以及脚本的哪一部分应该导航到被测组件。

    【讨论】:

    • 感谢您的解决方案,但如果a[contains(@id,'cell_13_1')] 不存在,它就不起作用...
    • 但这有效:) if(!casper.exists('#selector')){ #selector doesn't exist } 等等 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多