我正在测试的应用程序最近将它更新为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(除非这是唯一的选择)。这不是这个问题的问题)
答案 0 :(得分:3)
当XPath 1.0函数需要一个字符串但是提供了一个nodelist时,它只使用它的第一个元素。
在您的情况下,Exit按钮有两个text()子项(即button/text()
返回一个nodelist),其中第一个只包含空格,因此它不包含“Exit”。如果将表达式更改为contains(., 'Exit')
,则通过连接所有文本后代将按钮转换为字符串。