Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取CasperJS中选定元素的DOM属性_Casperjs - Fatal编程技术网

获取CasperJS中选定元素的DOM属性

获取CasperJS中选定元素的DOM属性,casperjs,Casperjs,我正在用CasperJS构建一个概念验证测试,我试图在有东西可用和没有东西可用的时候绞尽脑汁 我有点不明白为什么需要evaluate(),为什么一个人不能仅仅获得一个页面,然后带着document.queryselectoral()进城,但这最终给了我一个长度为零的节点列表。。。即使在casper.echo输出HTML并看到大量匹配的选择器之后 现在,我正在尝试: var瓦; var-pid; casper.waitForSelector('.m-product-tile',function()

我正在用CasperJS构建一个概念验证测试,我试图在有东西可用和没有东西可用的时候绞尽脑汁

我有点不明白为什么需要
evaluate()
,为什么一个人不能仅仅获得一个页面,然后带着
document.queryselectoral()
进城,但这最终给了我一个长度为零的节点列表。。。即使在
casper.echo
输出HTML并看到大量匹配的选择器之后

现在,我正在尝试:

var瓦;
var-pid;
casper.waitForSelector('.m-product-tile',function(){
tile=this.evaluate(函数(){
返回uuu utils_uuu.findOne('.m-product-tile');
});
pid=this.evaluate(函数()
返回uuu utils_uuu.findOne('.m-product-tile').getAttribute('data-pid');
});
//在平铺上单击()之类的东西,并确保URL中包含pid
});
但这感觉是错误的,因为我不确定
\uuuutils\uuuu.findOne()
是否总是返回相同的元素

我希望能够做到这一点:

pid=tile.getAttribute('data-pid');
但当我尝试这样做时,我得到了一个错误:

uncaughtError: TypeError: 'undefined' is not a function (evaluating 'tile.getAttribute('data-pid')')
tile
是否以某种方式不再是具有
getAttributes
方法的
DOMNode
?使用
typeof tile
,它仍然认为它是一个对象。我回显了DOMNode,它有一个
getAttributes

第一个示例中的代码与
getAttribute
一起工作。。。那么为什么
tile
会变形为不再有
getAttributes
方法的东西呢


提供了一个很好的答案。。。但是,我仍然想知道,如果页面返回的内容是一个
DOMNode
,为什么我不能将其视为一个?

这样一个存在的问题。这就是phantomjs及其
评估
函数的工作方式。无法传递非原语:函数将被剥离,因为它们是使用
new
创建的对象。为什么不直接使用
pid=this.getElementAttribute('.m-product-tile','data-pid')?我在该类中有几个元素,我需要确保我引用的是findOne()方法返回的同一个元素。我现在所拥有的确实有效,但是两次查询远程DOM并希望它返回相同的元素感觉是错误的。我将继续我现在的做法。你可以回答你自己的问题。