为什么这个xpath找不到所需的元素?

时间:2017-07-21 19:00:09

标签: html angular xpath

我正在测试的应用程序最近将它更新为Angular 4,现在有一些我无法通过文本匹配的certian元素。以下是应用程序的一小段HTML片段:

        <!----><div _ngcontent-c14="" class="form-group row">
            <label _ngcontent-c14="" class="col-2 col-form-label" for="example-text-input">Lift Pump Relay</label>
            <div _ngcontent-c14="" class="col-10">
                <div _ngcontent-c14="" ngbdropdown="" class="dropdown">
                    <button _ngcontent-c14="" aria-haspopup="true" class="btn btn-secondary dropdown-toggle" ngbdropdowntoggle="" aria-expanded="false">Selected: Off</button>
                    <div _ngcontent-c14="" class="dropdown-menu">
                        <!----><button _ngcontent-c14="" class="dropdown-item"> On 
                        </button><button _ngcontent-c14="" class="dropdown-item"> Off 
                        </button><button _ngcontent-c14="" class="dropdown-item"> Toggle 
                        </button>
                    </div>
                </div>
            </div>
        </div>


        <div _ngcontent-c14="">
            <!---->
            <!---->
            <!---->
        </div>

        <!---->
        <!---->

        <!----><div _ngcontent-c14="" class="wi-actuator-control-buttons">
            <button _ngcontent-c14="" class="btn btn-secondary">
                <i _ngcontent-c14="" class="fa fa-times"></i> Exit
            </button>
            <!----><button _ngcontent-c14="" class="btn btn-secondary">
                <i _ngcontent-c14="" class="fa fa-gears"></i> Start
            </button>
            <!---->
        </div>

    </div>

我可以使用如下文字访问On / off / Toggle按钮:

//button[contains(text(), 'On')] //using the on button in this example

但由于某种原因,这不适用于“开始”和“退出”按钮,如下所示:

//button[contains(text(), 'Exit')] //using Exit for this example

在应用程序周围的许多地方就是这种情况,它似乎与那个&#34; i&#34;嵌套在按钮内的元素。 (例如,退出按钮嵌套在<i _ngcontent-c14="" class="fa fa-times"></i>内)当那个&#34; i&#34;元素出现在按钮中我似乎无法通过文本匹配元素。

有谁知道为什么会这样。

(请不要告诉我只使用CSS或Jquery(除非这是唯一的选择)。这不是这个问题的问题)

1 个答案:

答案 0 :(得分:3)

当XPath 1.0函数需要一个字符串但是提供了一个nodelist时,它只使用它的第一个元素。

在您的情况下,Exit按钮有两个text()子项(即button/text()返回一个nodelist),其中第一个只包含空格,因此它不包含“Exit”。如果将表达式更改为contains(., 'Exit'),则通过连接所有文本后代将按钮转换为字符串。