2015-07-20 245 views
0

在我的測試中,我需要等待頁面加載才能繼續。因爲某些原因,waitForSelectorwaitForText不工作,雖然我可以只使用wait(value),但我必須考慮服務器可能會變慢的時間,並使價值比我想要的大得多;所以我正在考慮做一個while循環,告訴系統每次返回時等待500毫秒,因爲頁面上不存在'someCSSpath'。有沒有辦法做到這一點(可能是「casper.DoesntExist'?),或者沒有更好的辦法來做到這一點?等待頁面加載CasperJS

var css3path = "body > div.container-fluid > div:nth-child(3) > div.row.ng-scope > div:nth-child(1) > a > div"; 
casper.waitForSelector(css3path , function(){ 
    this.test.assertExists(css3path); 
    if (casper.exists(css3path){ 
     this.echo("logged in!");} 
    else{ 
     this.echo("not logged in"); 
    }; 
}); 

當我使用一個casper.wait(6000, function(){ 而不是waitForSelector,它工作正常。
我使用waitforselector以及相同的格式,這也是可行的;我認爲這是我正在尋找的具體事情,這給我帶來麻煩

此外,當我使用wait(6000,測試發現CSS3路徑就好了;它只是waitForSelector找不到它

+0

這正是'waitForSelector()'。你可能沒有正確使用它。請顯示您的代碼,您希望發生什麼以及實際發生了什麼(包括錯誤消息,屏幕截圖說明)。爲了安全起見:請註冊到'resource.error','page.error','remote.message'和'casper.page.onResourceTimeout'事件([Example](https://gist.github。 COM/artjomb/4cf43d16ce50d8674fdf))。也許有錯誤。 –

+0

您確定存在CSS選擇器。也許你正在檢查一個基於桌面的CSS選擇器,但PhantomJS加載了沒有這種選擇器的移動網站。 –

+0

您使用哪個PhantomJS版本?在v1.x中有一個錯誤:第n個子選擇器 –

回答

0

這將有助於知道爲什麼確切地說waitForSelectorwaitForText不起作用。他們是否超時?他們沒有找到所需的選擇器或文本?

如果它們超時,我會建議更改Casper將等待的默認時間量,直到它發送超時消息。

//Set time-out to 20000 milliseconds (20 seconds) 
casper.options.waitTimeout = 20000; 

casper.test.begin('Begin tests', function suite(test) 
{ 
    //Your tests go here 
} 

它有一個超時而不是一個while循環可以循環肯定是很重要的:你開始測試之前,像這樣你改變這種使用casper.options。如果服務器出現問題,那麼測試將會超時,並且您將知道某些錯誤。

退房這個問題了JavaScript的更多信息while循環等待一個標誌:

Javascript - wait until flag=true

+0

它曾經超時,但由於某種原因,它不再那麼做了,它只是坐在那裏,等着我想。 – 2manysemicolons

+0

直到超時爲止的默認時間量爲5秒(5000毫秒),以便可以解釋爲什麼您的'casper.wait(6000,function()'工作(可能需要超過5秒但小於6的加載時間)除此之外,恐怕在你做Artjom B.建議之前,我不能提供更多的建議,任何更多的上下文和/或錯誤信息都會非常有幫助 – Whitehawk

+0

出於興趣,你的整個CSS3路徑是什麼're使用?@ 2manysemicolons – Whitehawk