将XPath与CasperJS一起使用

时间:2017-05-31 16:45:36

标签: javascript xpath casperjs

我正在使用CasperJS测试我的前端,并创建了一个名为“Brand New Name”的新元素“foo”,并且已经存在'foo'元素。我需要使用XPath来选择具有正确名称的特定元素,以便我可以使用Casper测试它是否存在。

这就是我目前正在做的事情:

this.test.assertExists(x('//*[@class="foo" and text()="Brand New Name"]'), 'new thing exists')

但这不是找到我想要的,我做错了什么?

更新1

这是我收到的Casper.JS失败消息,即使xPath选择器看起来正确。

FAIL new category exists
#    type: assertExists
#    file: ../../../foo/test/casper/foo_manager/new_category.js
#    subject: false
#    selector: {"type":"xpath","path":"//*[@class=\"foo\" and contains(text(), \"Brand New Category\")]"

我已经意识到我想要选择的元素中实际存在span。我试图解释这一点,但我无法让xPath CasperJS选择器工作。我已将xPath选择器更新为contains,但仍无效。

选择器如下所示:

this.test.assertExists(x('//*[@class="foo" and contains(text(), "Brand New Category")]'), 'new category exists')

有问题的元素如下所示:

<a href='#' class='foo' id='foo-bar'>
  Brand New Category
  <span>some text</span>
</a>

1 个答案:

答案 0 :(得分:2)

如果您尝试这样做,您的测试应该通过:

HTML index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>CasperJS and XPath</title>
</head>
<body>
  <ul>
    <li class="foo">Foo</li>
    <li class="foo">Bar</li>
    <li class="foo">Brand New Name</li>
  </ul>
</body>
</html>

JavaScript xpath.js

casper.test.begin('CasperJS and XPath', 1, function (test) {
  var x = require('casper').selectXPath;

  casper.start('index.html', function () {
    this.test.assertExists(x('//*[@class="foo" and text()="Brand New Name"]'), 'new thing exists');
  });

  casper.run(function () {
    test.done();
  });
});

<强>命令

casperjs test xpath.js