2014-05-12 90 views
3

我想檢查選擇器是否存在於我的網頁中,但casperjs從來沒有找到它。PhantomJS/CasperJS AssertExists()失敗

我已經試過兩種方法:

1.無需等待

casper.then(function() { 
    // search for 'casperjs' from google form 
    this.test.assertExists('#search-form', 'the element exists'); 
    // this.test.assertExists('.glyphicon.glyphicon-plus', 'the element exists'); 
}); 

2.等待選擇

casper.waitForSelector('#search-form', function() { 
    this.echo("I'm sure #search-form is available in the DOM"); 
}); 

3.另一個等待的做法

casper.waitFor(function check() { 
    return this.evaluate(function() { 
     return $('#search-form').length == 1; 
    }); 
}, function then() { // step to execute when check() is ok 
    test.assertExists('#search-form', 'tabs area is found'); 
}, function timeout() { // step to execute if check has failed 
    this.echo("Timeout: page did not load in time...").exit(); 
}); 

到目前爲止,他們都沒有找到選擇器。而這個選擇器是從html加載的,它不是由javascript插入的。

任何想法?

回答

3

嗯,我想你應該檢查,如果你的選擇是在您的網頁這樣的:

casper.then(function(){ 
    console.log(this.getPageContent()); 
}); 

命令-pipe的輸出 - :casperjs test yourFile.js > seePageContent.html

或者你可能更喜歡這種方式(與等待如果需要的話):

casper.then(function(){ 
    this.wait(3000,function(){ 
     var fs = require('fs'); 
     fs.write("seePageContent.html", this.getPageContent(), 'w'); 
    }); 
}); 

這樣你就知道你的元素是否存在。如果沒有,那麼你的上一步是錯誤的。

+1

+1有人可能認爲這可能已過時,但有時一個頁面將具有不同的DOM元素,具體取決於userAgent或在瀏覽器或phantomjs中分解。 –

+0

你說得對,我有一個問題,默認情況下,CasperJs用Linux **推出了移動版本的網站**。 userAgent對設備奇怪地未知,導致casper切換到移動版本。我注意到它只是通過檢查DOM(並用'this.capture()'確認它)。 Marcelosalloum,你可以等待一個元素出現,如果它不存在,它將無法工作。最好知道什麼是現在,而不是什麼不是。 – Fanch