如何在casper测试中等待元素存在?

时间:2013-11-08 23:53:46

标签: coffeescript phantomjs casperjs

casper.test.begin "Can open the homepage", (test) ->
  casper.options.viewportSize = {width: 1024, height: 768}
  casper.start("http://localhost:4000/", ->
    @wait(1000, ->
      test.assertHttpStatus 200
      test.assertTitle("XYZ Corp")
      test.assertExists('DIV.links')
      test.assertElementCount('DIV.links', 1)
      test.assertExists('IMG#companyLogo')
      @capture('./test/screencaps/homepage.png')
    )
  ).run ->
    test.done()

好的,以便测试通过就好了。我想改进的是@wait调用,做@waitFor:

似乎更聪明
@waitFor(
  ->
    document.querySelectorAll('DIV.links').length > 0
  ->
    test.assertHttpStatus 200
    test.assertTitle("XYZ Corp")

然而,这总是超时。 document对象存在,它可以运行querySelectorAll函数,但我从来没有得到任何结果。 DIV.links对象必须出现在页面上(我可以在屏幕截图中看到它),因为测试是在第一种情况下传递的。但在第二种情况下,条件总是错误的。 waitFor文档为here

奖金问题:我可以调试casper测试吗?

1 个答案:

答案 0 :(得分:2)

4天,没有回答,我自己想出来了:

  .then( ->
    @open("theUrl")    
    @waitUntilVisible("DIV.alpha",
    ->
      test.assertExists("DIV.alpha") # doesnt hurt to check
      test.assertExists("DIV#beta")
      @capture('./test/screencaps/waitUntilVisible.png')
    ->
      test.fail('failed to find div.alpha')
    3000
    )
  )