检查 CasperJS 中标签是否存在(而不是选择器)

Check if label exists (rather than selector) in CasperJS

根据 CasperJS 文档,您可以检查选择器是否 exists.

if (this.exists('#my_super_id')) {
    this.echo('found #my_super_id', 'INFO');
}

您可以用任何 CSS3 选择器代替 #my_super_id,效果非常好。但是,如果您想单击具有通用 class 的特定按钮,这不是很有用。

<div class="btn button">Save</div>

命令 clickLabel 在这些情况下效果很好,但我还没有找到在单击标签之前检查标签是否存在的方法。

// This doesn't work, for obvious reasons

if (this.labelExists('Save')) {
    this.clickLabel('Save');
}

有人有解决办法吗?

XPath 是你的朋友(或者你可以遍历页面上的所有元素)。

var x = require("casper").selectXPath;

casper.labelExists = function(labelText, tag){
    tag = tag | "*";
    return this.exists(x("//"+tag+"[text()='"+labelText+"']"));
};

这会在 casper 对象上创建一个您可以重复使用的函数,它的工作方式与 clickLabel.

完全相同