【问题标题】:Select button with jQuery for casperjs使用 jQuery 为 casperjs 选择按钮
【发布时间】:2017-02-07 12:58:25
【问题描述】:

我想选择一个带有casperjs 的按钮,但我的问题是该按钮已更改IDsclasses。我只能根据 span 的文本“识别”按钮,完成 2 级:

<button class="changes-always" id="changes-always-too">
   <div class="changes-always2">
      <span class="changes-always3">Same text</span>
   </div>
</button>

使用 jQuery,我可以选择 button,首先选择 span,因为它始终具有相同的内容。

var span = $('span:contains("Same text")');
var button = span.parent().parent() // there is probably a nice way to do this

我通过 casperjs 将 jQuery 加载为 clientScripts,我的问题是如何正确使用 evaluate(function() 以及将变量用作 casperjs 的选择器(如果可能的话) )

这就是我的进展,但后来我遇到了 objectstring 问题。

casper.then(function() {
  var items = this.evaluate(function () {
        return $('span:contains("Some text")');
  });
  console.log(items);
});

如果有人能指出我正确的方向,那就太好了,如何使用jQuery 作为选择器,然后让casperjs 使用它。提前多次感谢!

【问题讨论】:

  • 你的方法应该有效。你需要用那个按钮做什么?有什么障碍?
  • 我需要点击按钮,但不知道怎么做,或者将其传递给 casperjs。

标签: javascript jquery phantomjs casperjs


【解决方案1】:

如果文本是唯一的,您也可以使用 clickLabel()。

casper.clickLabel("Some text");

这也适用于按钮。

另一个选项,仍然不是 jquery 应该是通过文本获取 id,如果有时有相同的文本,通过索引将它们取出:

...
var x = require('casper').selectXPath;
var buttonIDs;
// get button ID's with specific text by getElementsAttribute with xPath selector
buttonIDs = casper.getElementsAttribute(x("//button[contains(text(),'Some specific text')]"), 'id');
casper.then(function() {
  casper.echo(buttonIDs);
});
casper.then(function() {
  casper.click("button[id='" + buttonIDs[0] + "']");
});

...

【讨论】:

  • 有效,但正如您所说,只有它是独一无二的。如果有更多具有相同标签的选择器,则失败。
  • 我更新了答案,添加了另一个选项。它仍然不是 jquery,但我认为这对于解决您的问题是可选的。 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多