当值包含时如何通过 html 属性在 Protractor 中 select 元素

How to select element in Protractor by html attribute when value contains

苦苦思索如何 select 没有标准唯一 ID 或 class 的元素。我如何使用量角器 select 这个输入元素?

注意:我无法使用 class ComboBoxInput_Default class,因为此下拉框用于其他几个页面元素。至少 10+ DOM 个级别也没有任何易于识别的父元素。

<div style="display:inline; white-space: nowrap;" id="ctl00_ctl31_g_b56afa08_7869_450c_8871_f6759a89d9b1_ctl00_WPQ3txtFields_ddPositioList_10_Solution_MultiComboSelection" class="ComboBox_Default">
  <input type="text" style="width: 133px; height: 15px;" delimiter=";" class="ComboBoxInput_Default" value="-select-" name="ctl00$ctl31$g_b56afa08_7869_450c_8871_f6759a89d9b1$ctl00$WPQ3txtFields_ddPositioList_10_Solution_MultiComboSelection_Input" id="ctl00_ctl31_g_b56afa08_7869_450c_8871_f6759a89d9b1_ctl00_WPQ3txtFields_ddPositioList_10_Solution_MultiComboSelection_Input" autocomplete="off">    
<div>

使每个输入不同的唯一标识标记附加到生成的 ID 的末尾,Solution_MultiComboSelection_Input

如果我必须使用 jquery 获取此元素,我会使用(不可取)包含 $( "input[name*='Solution_MultiComboSelection_Input']" )。有没有一些类似的方法可以用 Protractor 以这种方式定位元素?

如果这是唯一以 ComboBoxInput_Default 作为 class 的元素,那么您可以 select 使用 元素(by.css('.ComboBoxInput_Default'))

This page 有很多 select 的例子。

如果没有看到页面的其余部分,很难确定,但我会尝试...

$('input[value="-select-"].ComboBoxInput_Default);

或者也许

$('div.ComboBoxInput_Default input.ComboBoxInput_Default);

也就是说,最好的解决方案是在代码中添加一个标识符。希望这对您有所帮助!

当然,使用 "contains" 或 "ends-with" CSS 选择器:

element(by.css("input[id*=Solution_MultiComboSelection_Input]"));
element(by.css("input[id$=Solution_MultiComboSelection_Input]"));