selenium:是否可以在selenium定位器中使用正则表达式

时间:2010-01-05 16:21:09

标签: regex xpath selenium

我想得到所有div / links / ..的xpath计数,它们的文本与正则表达式匹配。例如:

<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 个答案:

答案 0 :(得分:2)

使用允许您使用javascript的dom=协议。并且javascript有regexp:

# 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;
})()});

答案 1 :(得分:2)

正则表达式仅在XPath 2中可用。如果您使用的浏览器中有XPath 2,则以下内容应该有效:

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

但是,我相信在Selenium中实现的XPath的Javascript实现实现了XPath 1.0。因此,编写一个小的Javascript函数来抓取页面中的所有元素,并在Javascript中使用正则表达式,只是让这个函数返回匹配的数量可能更容易。然后,您可以使用get_eval调用此Javascript函数。

答案 2 :(得分:0)

您还可以获取父/根元素的HTML页面源或innerHTML(通过DOM定位器),然后通过编程语言将XML转换为DOM对象。从那里,您可以使用XPath(版本1或2)随意处理DOM以获得您想要的内容。然后,您可以使用Selenium传递结果(例如计数)来执行某些操作。

使用这种方法,您只受限于您的编程语言提供的任何内容。