我正在尝试根据文本选择一个元素。我遇到的问题是元素文本在源代码中多次存在。我使用 xpath 来查找它(尽管我尝试避免使用 xpath),但这就是我能做的全部工作。
这是我正在处理的 html:
<ul id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage" class="cbl centered d2" style="width:511px;">
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$0" onclick="CannedCommentSelected(this);" value="Complexity of job requires extra charge" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0">Complexity of job requires extra charge</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_1" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$1" onclick="CannedCommentSelected(this);" value="Complexity of job requires extra time" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_1">Complexity of job requires extra time</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_2" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$2" onclick="CannedCommentSelected(this);" value="Current workload requires extra time" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_2">Current workload requires extra time</label>
</li>
<li>
<input id="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_3" name="ctl00$ctl00$Dialogs$Dialogs$ctlAcknowledgeMessage_ConditionalDecline$cblMessage$3" onclick="CannedCommentSelected(this);" value="Distance to property requires extra charge" type="checkbox">
<label for="Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_3">Distance to property requires extra charge</label>
</li>
</ul>
我正在使用 driver.findElement(By.xpath("//label[contains(text(), '复杂的工作需要额外费用')]"));
但我开始“元素当前不可见,因此可能无法与之交互”错误,这让我发现有多个带有“工作复杂性需要额外费用”文本的标签。
我尝试了 driver.findElement(By.cssSelector("#Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage > #Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage_0 > label[text='作业的复杂性需要额外费用']"));
但尝试超时找到该元素。
我做错了什么?
我什至尝试了 driver.findElement(By.cssSelector("#Dialogs_Dialogs_ctlAcknowledgeMessage_ConditionalDecline_cblMessage > input[value='复杂性工作需要额外费用']"));
我确信它会起作用,但是寻找它也会超时。
最佳答案
在这种情况下,您应该尝试使用 JavascriptExecutor
与其进行交互,如下所示:-
WebElement el = driver.findElement(By.cssSelector("input[value='Complexity of job requires extra charge']"));
((JavascriptExecutor) driver).executeScript("arguments[0].click();",el);
已编辑:-
List<WebElement> els = driver.findElements(By.cssSelector("input[value='Complexity of job requires extra charge']"));
for(WebElement el : els)
{
if(el.isDisplayed() && el.isEnabled())
{
el.click();
}
}
希望有帮助...:)
关于java - 使用 cssSelector 按文本选择嵌套元素 - Selenium WebDriver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399778/