CasperJS - 如何点击提供的元素

时间:2013-10-09 08:23:23

标签: casperjs

这是网页上带有UL的Div。

<div id='sites'>
  <ul style="display: block;">
    <li data-product-id="55">
      <a href="#">Test1<br><em class="environment">Production</em></a>
    </li>
    <li data-product-id="99">
      <a href="#">Test2<br><em class="environment">Production</em></a>
    </li>
    <li data-product-id="98">
      <a href="#">Test3<br><em class="environment">Production</em></a>
    </li>
    <li data-product-id="61">
      <a href="#">Test4<br><em class="environment">Production</em></a>
    </li>
    <li data-product-id="97">
      <a href="#">Test5<br><em class="environment">Production</em></a>
    </li>
    <li class="active">
      Test6<br><em class="environment">Production</em> <a class="flat button" href="/product_center">Settings</a>
    </li>
  </ul>
</div>

默认情况下,页面加载 Test6 ul ,我想点击 Test5

Firepath提供的CSS定位器为"#sites>ul>li>a"。所以我在casperjs中试过这个:

var casper = require('casper').create({
    verbose: true,
    logLevel: "debug",
});

casper.start('http://localhost:8080', function() {
    this.echo(this.getTitle());
});

casper.then(function(){
    casper.page.injectJs('jquery.js');
    this.evaluate(function (){
          $("#sites>ul>li")[4].click();
    });
    this.capture('screenshot.png');
});

casper.then(function() {
    this.echo(this.getTitle());
});

出现的标题始终是当前页面。它应该点击Test5并获取Test5页面的标题。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

尝试#sites .active作为选择器

我会做

this.click('#sites .active')而不是

casper.page.injectJs('jquery.js');
  this.evaluate(function ()
          {
          $("#sites>ul>li")[4].click();
       });

编辑评论:

试试这个

#sites li:nth-child(5) a

答案 1 :(得分:1)

JS数组的方括号返回&#34;对象HTMLDivElement&#34 ;;而.slice()返回数组。

click()函数通常与数组对象一起出现。

所以你的代码应该转到:

$("#sites ul li").slice(4,5).click()