2015-07-20 133 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