селен: возможно ли использовать регулярное выражение в локаторах селена - PullRequest
1 голос
/ 05 января 2010

Я хочу получить количество xpath всех divs / links / .., текст которых соответствует какому-либо регулярному выражению. Например:

<span> day 2 night </span>
<span> day 4 night </span>
<span> day 17 night</span>

Я бы хотел позвонить:

sel.get_xpath_count('regexp:day \d night')

и пусть он вернет 2. (Это простой пример, я бы хотел использовать все виды регулярных выражений)

Возможно ли это и как это сделать?

Ответы [ 3 ]

2 голосов
/ 05 января 2010

Регулярные выражения доступны только в XPath 2. Если XPath 2 доступен в используемом вами браузере, то должно работать следующее:

get_xpath_count("xpath=//div*[matches(text(), \"day \\d night\")]");

Однако я считаю, что реализация XPath на Javascript, встроенная в Selenium, реализует XPath 1.0. Поэтому, вероятно, проще написать небольшую функцию Javascript для захвата всех элементов на странице и использовать регулярное выражение в Javascript, и просто заставить эту функцию возвращать количество совпадений. Затем вы можете вызвать эту функцию Javascript, используя get_eval.

2 голосов
/ 05 января 2010

Используйте протокол dom=, который позволяет вам использовать javascript. И JavaScript имеет регулярное выражение:

# sorry, example in Perl:
$sel->get(qq{dom=(function(){
    var x = document.getElementsByTagName('span');
    var result = [];
    for (var i=0;i<x.length;i++) {
        var txt = x[i].innerHTML;
        if (txt.match(/day \d night/)) {
            result.push(x[i]);
        }
    }
    return result;
})()});
0 голосов
/ 10 ноября 2011

Вы также можете получить исходный HTML-код или innerHTML (через локатор DOM) родительского / корневого элемента, а затем преобразовать в XML как объект DOM через ваш язык программирования. Оттуда вы можете обработать DOM как вам угодно с XPath (версия 1 или 2), чтобы получить то, что вы хотите. Затем вы можете передать результат (например, количество) с Selenium, чтобы что-то сделать.

При таком подходе вы ограничены только тем, что предлагает ваш язык программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...