如何使用selenium和Python查找包含特定文本的ng-repeater

时间:2015-12-27 09:18:18

标签: python angularjs selenium

我有一个有角度的网络应用程序,我想用selenium&蟒蛇 html文件是这样的:

<div ng-repeat="item in items">
    <div ng-repeat="address in addresses">
       bla
    </div>
    <div ng-repeat="address in addresses">
       dodo
    </div>
</div>
<div ng-repeat="item in items">
    <div ng-repeat="address in addresses">
       foo
    </div>
    <div ng-repeat="address in addresses">
       didi
    </div>

</div>

使用selenium和python我想查找项目转发器中项目中的所有元素,但仅限于包含特定文本(例如bla)

这意味着我希望通过网页上显示的文字获取第一个转发器中的所有项目,而不是第二个转发器中的所有项目

我尝试了类似的东西

browser.find_element_by_xpath("//div[ng-repeat='item in items'] and (contains(text(), 'bla'))")

我的错误:

invalidSelectorException

2 个答案:

答案 0 :(得分:1)

而不是:

browser.find_element_by_xpath("//div[ng-repeat='item in items'] and (contains(text(), 'bla'))")

尝试:

browser.find_elements_by_xpath("//div[@ng-repeat='item in items' and contains(., 'bla')]")

我在那里做了什么改变了结束方括号的位置,并在ng-repeat开始时添加了@ - 用于属性检查的语法,将find_element_by_xpath更改为find_elements_by_xpath并且最后将text()更改为.(单个点)。当你在不同的子节点中有多个文本时,这通常会更好。

答案 1 :(得分:0)

我会尝试下面的xpath -

//div[@ng-repeat='item in items']/div[@ng-repeat='address in addresses' and contains (text(),'bla')]

对于html -

<div>
<div ng-repeat="item in items">
    <div ng-repeat="address in addresses">
       bla
    </div>
    <div ng-repeat="address in addresses">
       dodo
    </div>
</div>
<div ng-repeat="item in items">
    <div ng-repeat="address in addresses">
       foo
    </div>
    <div ng-repeat="address in addresses">
       didi
    </div>

</div>
</div>

请参阅HERE的演示测试。