无法使用CasperJS点击有效选择器

时间:2014-06-11 21:02:12

标签: javascript css-selectors casperjs

使用Casperjs,我正在尝试将点击事件发送到页面上的其中一个链接。它的位置取决于窗口的大小,因此存在多个实例。出于这个原因,我正在使用基于其父级的选择器。在确认不等于undefined并且我之前正在检查null之前,我不会发送偶数。当我打印与我正在使用的选择器匹配的对象时,我得到[object Object],但是当我尝试发送click事件时,我收到一条错误,指出"Cannot dispatch mousedown event on nonexistent selector"。如果querySelectorAll()返回同一选择器的对象,这怎么可能呢?这是我正在使用的代码。

casper.each(links, function() {
this.waitFor(function check() {
    return (this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button') != undefined);
    },
    function then() {
        this.echo(this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button'));
        this.click('div.talk-hero__tools__list__actions a.rate-button');
});
});

2 个答案:

答案 0 :(得分:1)

尝试此操作(在您对evaluate的通话中添加匿名功能,并将选择器检查从undefined切换为null):

this.waitFor(function check() {
  return this.evaluate(function() {
    return document.querySelector('div.talk-hero__tools__list__actions a.rate-button') !== null;
  });
}, function then() {
    this.echo(this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button'));
    this.click('div.talk-hero__tools__list__actions a.rate-button');
});

答案 1 :(得分:1)

事实证明casper.each()没有打开链接。我通过在casper.thenOpen()中的所有代码周围添加each()来解决它。