assertExists 与 if-else 语句

assertExists with if-else statement

我使用这个代码:

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')]"));
    }         
});

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

这正是 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')]"));
    }       
});

此代码等同于您的第一个代码段。注释 fail() 调用并取消注释最后一次点击以获得您的 "intended" 行为。

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