2015-11-01 3 views
2

Я пытаюсь проверить страницу с помощью CasperJS. Существуют ли какие-либо возможности для получения каждого элемента (абзацы), который содержит данные атрибутов -...? После этого мне нужно сравнить этот атрибут с внутренним HTML, но я не знаю, как это сделать.Получите каждый элемент с конкретным (data-) атрибутом в CasperJS

ответ

5

Прежде всего, необходимо получить представление всех элементов вы заинтересованы в этом можно сделать с casper.getElementsInfo(selector):.

var elements = casper.getElementsInfo("p[data-whatever]"); 

Это даст вам все <p> элементов на странице, которые имеют data-whatever набор атрибутов. Если вы хотите отфильтровать это значение по значениям атрибутов data-whatever, вам необходимо использовать attribute selectors в соответствии с вашими потребностями.

Функция getElementsInfo() содержит очень полезную информацию, но не содержит фактических элементов, которые вы хотите использовать. Он содержит только представление в виде массива.

Вы можете перебирать эти представления элементов и выполнять свои операции над ними. Вы сказали, что хотите "сравнить этот атрибут с внутренним HTML". Это может быть сделано следующим образом:

elements.forEach(function(element){ 
    if (element.attributes["data-whatever"] === element.html) { 
     casper.echo("data attribute and content are exactly equal"); 
    } else { 
     casper.echo("data attribute and content are different"); 
    } 
}); 

Имейте в виду, что вы можете сделать это на элементы непосредственно с обычными функциями DOM, но тогда вам придется сделать это внутри casper.evaluate(), потому PhantomJS (который CasperJS построено) имеет два контекста, а контекст страницы изолирован. Кроме того, вы не можете возвращать узлы DOM из page context.