2017-05-31 40 views
2

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

这是我在做什么目前:

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> 

回答

2

,如果你试试这个,你的测试应该通过:

HTMLindex.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> 

的JavaScriptxpath.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 
+0

谢谢您的回答@Badacadabra,我已经更新了我的问题,我仍然有,如果你的问题可以看看?谢谢 – hlatshaw

+0

我已经使用新的XPath选择器测试了您的新HTML结构,并且它正在工作。当您使用Casper进行测试时,请确保该元素已加载。这可能是一个时间问题... – Badacadabra

+0

元素是绝对加载的,我可以截屏casper并显示。此外,我改变了测试搜索一个特定的ID而不是按类和文本,它通过了,但我仍然无法通过使用类和文本传递 – hlatshaw