[selenium] Проверить кол-во элементов на странице

Макс

Старожил PHPClub
[selenium] Проверить кол-во элементов на странице

Прочел в phpincside статью про selenium
Возник вопрос.
Как проверить, что кол-во элементов на странице, удовлетворяющих какому-нибудь условию, равно нужному числу ?
Например, проверить что количество ссылок, в URL-е которых есть строка 'search' равно 20.
Желательно через xpath (так удобнее условия задавать)
 

Screjet

Новичок
Re: ?

document.getElementsByTagName?
Код:
<a href="1-no-search.html">1</a>
<a href="2-beta.html">2</a>
<a href="3-alpha-search.html">3</a>
PHP:
<script type="text/javascript">
var links = document.getElementsByTagName('A');
var found = 0;
for( var i=0; i<links.length; i++ ){
	var link = links[i];
	if ( link.href.match('search') ){
		found++;
	}
}
alert(found);
</script>
Это решение подойдет?
 

Макс

Старожил PHPClub
Screjet
проблема не в том, чтобы написать код на javascript или xpath а в том, чтобы заставить этот код работать под Selenium-ом.
В самом selenium-е есть /html-xpath/example.html с примером :
PHP:
    var result = document.evaluate("count(//span[@class='Number'])", document, null, XPathResult.NUMBER_TYPE, null);
    document.write("<h1>\"count(//span[@class='Number'])\" as Number</h1>" + result.getNumberValue());
если его просто в страницу вставить - работает.
Но вот сделать тест из этого кода пока не получается.

-~{}~ 25.09.05 16:23:

пробовал вот такой тест :
Код:
<tr>
<td>verifyText</td>
<td>xpath=count(//a[contains(@href, 'search')])</td> 
<td>20</td>
</tr>
получаю ошибку:
Код:
Element xpath=count(//a[contains(@href, 'second')]) not found
-~{}~ 25.09.05 16:38:

Судя по коду silenium-а этот тест вообще неверный.
Xpath-код должен начинаться с '//' :
Код:
    PageBot.prototype.locateElementByXPath = function(xpath, inDocument) {
    if (xpath.slice(0,2) != "//") {
        return null;
    }
...
-~{}~ 25.09.05 17:27:

Для себя решил так (проверял только в FireFox-е - для других броузеров мне не надо) :
Создаем новую проверку и новый локатор :
PHP:
Selenium.prototype.assertCount = function(locator, count) {
    var element = this.page().findElement(locator);
    assert.assertMatches(count, element);
}
PageBot.prototype.locateElementByCount = function (text, inDocument) {
    result = inDocument.evaluate(text, inDocument, null, XPathResult.NUMBER_TYPE, null).getNumberValue();
    return result;
}
теперь в файле с тестом создаем такой тест :
Код:
<tr>
<td>verifyCount</td>
<td>count=count(//a[contains(@href, 'search')])</td>
<td>20</td>
</tr>
 

MiRacLe

просто Чудо
Макс

создал assert, добавил locator (скопировал ;o) )

но при тестах вываливается Exception c текстом
inDocument.evaluate(text, inDocument, null, XPathResult.NUMBER_TYPE, null).getNumberValue is not a function
Хотя результат в скобках имеет typeof == XPathResult, а XPathException-ов которые прописаны в html-xpath-pathed.js не вылезает...

Версия Firefox - 1.0.7 (хотя в IE примерно тот же результат)

проверку делал самую простую - count=count(//table[@id=needed_table]//a)

собственно вопрос - дело в браузере, в кривых руках или всё-таки чего-то не хватает в скриптах ?
 
Сверху