当应该从先前设置的变量打开时,下一页不会加载

时间:2014-11-19 18:09:17

标签: javascript casperjs

我正在解析href属性中的网址,但是当我做

casper.thenOpen(url, function() {
    this.echo(this.getCurrentUrl());
});

显示空白。

我尝试访问的网页上的链接是在新选项卡中打开的,使用casper测试新选项卡比仅导航到同一选项卡上的新链接(我想是这样)稍微复杂一些这就是为什么我在变量中获取链接然后尝试打开它。

我在这里错过了什么吗?

代码段:

var href = '';

casper.then(function() {
    this.test.assertExists(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'the element exists');
    href = casper.getElementAttribute(x('//a[contains(@href, "SUBSTRING OF URL")]'), 'href');
});

casper.thenOpen(href, function() {
    this.echo(getCurrentUrl());
});

因此,当我回显href时,其值与我想要导航到的网址相同。但getCurrentUrl显示about:blank。此外,网址会在不到一秒的时间内打开,但在我尝试casper.waitForUrl()后的5000毫秒后会超时。

1 个答案:

答案 0 :(得分:1)

Casper通过将所有请求推送到堆栈,然后运行它们来工作。所以,在这一点上你称之为:

casper.thenOpen(href, function() {
    this.echo(getCurrentUrl());
});

href还没有机会被定义。我相信以下的重构是解决它的一种方法:

casper.then(function() {
  casper.open(href,function(){
    this.echo("Did it work this time?");
    });
});