我正在使用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>
答案 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