【发布时间】:2019-11-07 13:14:02
【问题描述】:
我正在尝试按文本选择列表中的条目。 li 条目也有 id,但我想改用文本。
我有以下html sn-p:
<fieldset felt id="bosted"
<ul class="feltliste ng-scope">
<li>
<label id="lblbostedleierKommunalt" for="bostedleierKommunalt" class="label ">
Leier kommunal bolig
</label>
</li>(verdi, tekst) in bostedTyper -->
<li>
<label id="lblbostedleierPrivat" for="bostedleierPrivat" class="label ">
Leier bolig
<div class="hjelpetekst ng-scope ng-isolate-scope" ng-class="{'hjelpetekst--utvidet': visHjelpetekst}" id="leierPrivat-hjelpetekst " ng-if="verdi === 'LEIER_PRIVAT'">
<button title="Vis hjelpetekst" type="button" ng-click="visEllerSkjulHjelpetekst($event)" aria-describedby="leierPrivat-hjelpetekst ">
<span class="bare-skjermleser" translate=""><span class="ng-scope">Vis hjelpetekst</span></span>
<est-ikon type="sporsmalstegn"><svg focusable="false"><use xlink:href="#ikon-sporsmalstegn"></use></svg>
</div>
上例中的文本条目是
Leier kommunal bolig
雷尔博利格
选项 1: 我正在尝试这样做:
driver.findElement(By.cssSelector("id='bosted' li[text=" + text + "]")).click();
我尝试过“价值”和其他选项。但我不断收到“指定了无效或非法的选择器”。
选项 2:我也尝试过此解决方案,取自此处类似问题的答案:
List<WebElement> options = bosted.findElements(By.tagName("li"));
for (WebElement option : options) {
if (option.getText().equals(bosituasjon)) {
option.click();
break;
}
}
除了我觉得它看起来很凌乱而且不是很优雅之外,它也不起作用。在观看测试运行时,它似乎试图单击页面上目标条目上方的条目。 (虽然我不确定。)不过,它不会返回任何错误。
但是,它确实找到了所有文本条目,并且 if 循环命中并执行 option.click() 行。
但显然有问题,因为它没有导航到页面上的列表条目,并且没有选择该选项。
另外,如果我使用 .sendkeys(Keys.ENTER) 而不是 .click(),我会收到“元素不可交互”错误。
【问题讨论】: