如何检查特定元素是否可见并仅在CasperJS中执行任务?

时间:2015-07-12 17:35:00

标签: json if-statement phantomjs visibility casperjs

我想检查一个元素何时对人眼可见。我使用了像vector<Package *> myPack(5);这样的方法,但这并没有帮助,因为它仍然没有显示。

我终于找到了一种方法来输出数据,告诉我使用this.exists()是否可见。

这是我拥有的和输出:

getElementsInfo()

这是我要检查var fs = require('fs'); var casper = require('casper').create({ viewportSize: {width: 950, height: 950} }); casper.start('https://example.com/check.html', function() { //this.captureSelector('1p.png', 'body'); this.echo(this.getTitle()); }); casper.then(function(){ var one = casper.cli.get(0); var two = casper.cli.get(1); this.sendKeys('input[id="txt"]',one); casper.waitForSelector('#txtsend', function() { this.click('#txtsend'); }); casper.waitForSelector('#Step1', function() { require('utils').dump(this.getElementsInfo('#Step1')); var a = this.fetchText('#Step1'); this.echo(a); }); }); casper.run(); 是真还是假的输出,如果是,则运行命令,如果是,则运行另一个命令。

visible

1 个答案:

答案 0 :(得分:0)

特别是一个步骤函数,用于等待页面上的元素变为可见,其名称waitUntilVisible()恰好是waitFor()visible()结合使用的简写。

在你的情况下,你会像这样使用它:

casper.waitForSelector('#txtsend', function() {
    this.click('#txtsend');
}).waitUntilVisible('#Step1', function then() {
    var a = this.fetchText('#Step1');
    this.echo(a);
    // do something
}, function onTimeout(){
    this.echo("not found");
    // do something else
});

您还可以省略onTimeout回调。如果找不到元素,那么它将停止剧本。

此外,您不需要解析任何内容,因为getElementsInfo()的输出是您可以访问的对象:

var info = casper.getElementsInfo("#Step");
casper.echo("Is visible? " + info[0].visible);

你也可以使用getElementInfo(),它只返回第一个匹配元素的信息而不是元素信息数组。