java - 使用 cssSelector 按文本选择嵌套元素 - Selenium WebDriver

标签 java selenium selenium-webdriver

我正在尝试根据文本选择一个元素。我遇到的问题是元素文本在源代码中多次存在。我使用 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_ctlAcknowledgeMes​​sage_ConditionalDecline_cblMessage > #Dialogs_Dialogs_ctlAcknowledgeMes​​sage_ConditionalDecline_cblMessage_0 > label[text='作业的复杂性需要额外费用']")); 但尝试超时找到该元素。

我做错了什么?

我什至尝试了 driver.findElement(By.cssSelector("#Dialogs_Dialogs_ctlAcknowledgeMes​​sage_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/

相关文章:

java - 如何使用机器人类在 Selenium 中基于 webelement 而不是 getlocation 的 xy 坐标执行 mousemove?

java - Spring 。验证期间错误 400

java - 无法从 java jar 运行 python 脚本

Python、Selenium Webdriver : How can I find the value of this attribute?

python - 在 Django 开发服务器上打开页面时出现错误状态行异常

node.js - Selenium 网络驱动程序 : HTML renders differently for Firefox vs. PhantomJS

java - "HasInputDevices"位于 "/org/openqa/selenium/interactions"但它仍在寻找 "/org/openqa/selenium/"

java - 在应用程序的 onStop 中在 android 中发送 http 请求

java - 如何检测文件中的新行(或空行)?

selenium - hh :mm:ss format in Extent report 3. 0.6 中总耗时如何设置