1

这是网页上带有 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 页面的标题。

我做错了什么?

4

2 回答 2

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
于 2013-10-09T08:59:43.513 回答
1

JS 数组的方括号返回“object HTMLDivElement”;而 .slice() 返回数组。

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

所以你的代码应该去:

$("#sites ul li").slice(4,5).click()
于 2015-10-26T12:04:28.347 回答