Как проверить функциональность сортировки(по возрастанию и по убыванию) в casperjs
Я новичок в этом фреймворке и также не получаю никакого представления о том, как проверить функциональность сортировки с помощью CasperJS.
Сценарий заключается в том, что мне нужно проверить результаты поиска с помощью функции сортировки. Когда я ищу по любому ключевому слову, он отображает все возможные результаты сопоставления.
1 ответ:
Вам придется определить свои собственные функции сравнения. Вот, например, тот, который сравнивает порядок лексикографических строк в нечувствительном к регистру порядке:
Трудность будет заключаться в том, чтобы найти правильные элементы, которые вы можете сравнить. Например, вам, вероятно, нужно будет разделить цену и валюту, разобрать цену как число и сравнить их.function cmpLexiInsAsc(a, b) { return a.toLowerCase() < b.toLowerCase(); } function cmpLexiInsDesc(a, b) { return a.toLowerCase() > b.toLowerCase(); }
Я буду считать, что для остальной части ответа у вас есть значение по умолчанию
<table>
и использовать его по столбцам заказ.Можно определить функцию, которая принимает индекс столбца (начиная с 1), дополнительный селектор для поиска элемента в ячейке и функцию сравнения для этого столбца. Он внутренне определяет CSS-селекторы или выражения XPath для доступа к ячейкам таблицы. Имейте в виду, что для этого вам нужно знать, сколько строк есть, и, возможно, настроить это, если есть строка верхнего/нижнего колонтитула.
function compare(colIndex, cellSelector, cmpFunc){ function rowSelector(rowIndex) { return "table#tableId tr:nth-child(" + rowIndex + ") > td:nth-child(" + colIndex + ")" + cellSelector; } var count = this.getElementsInfo("table#tableId tr"); if (count < 2) { return true; } var previous = this.getElementInfo(rowSelector(i)).text, current; for(var i = 2; i <= count; i++) { current = this.getElementInfo(rowSelector(i)).text; if (!cmpFunc(previous, current)) { return false; } previous = current; } return true; }
Затем вы можете запустить эту функцию
compare()
для нескольких столбцов в зависимости от по вашим критериям. Например:casper.then(function(){ casper.test.assert(compare.call(this, 1, " > span > span.info", cmpLexiInsAsc), "Column 1 ascending"); this.click("some selector to change ordering"); }); casper.then(function(){ casper.test.assert(compare.call(this, 2, " > div > span.info", cmpLexiInsDesc), "Column 2 descending"); });
В PhantomJS 1 есть редкая ошибка.x для
:nth-child()
CSS селекторов. Вы можете попробовать использовать селекторы XPath, которые поддерживаются в CasperJS через вспомогательную функцию:Обратите внимание, что CasperJS построен поверх PhantomJS и имеет те же ограничения. Вы не можете непосредственно работать с элементами DOM вне контекста страницы (var x = require('casper').selectXPath; ... casper.getElementsInfo(x("//table[@id='tableId']//tr["+rowIndex+"]/td["+colIndex+"]/span/span"));
casper.evaluate()
). Вам нужно будет заранее получить представление о таком элементе. Я делаю это, обращаясь к свойствуtext
на объект, возвращенный изgetElementsInfo()
.