Java selenium根据索引位置获取li元素并单击复选框

Java selenium根据索引位置获取li元素并单击复选框,java,selenium,Java,Selenium,我现在有了这个HTML,它使用Selenium I ant来切换具有给定索引位置(比如1)的li元素,其中表示我要单击spring的切换复选框 <ul id="todo-list" data-woven="abc"> <li class="active" data-index="0"> <div class="view"> <input class="toggle" type="checkbox"> <

我现在有了这个HTML,它使用Selenium I ant来切换具有给定索引位置(比如1)的li元素,其中表示我要单击spring的切换复选框

<ul id="todo-list" data-woven="abc">
<li class="active" data-index="0">
    <div class="view">
        <input class="toggle" type="checkbox">
        <label>Java</label>
        <button class="destroy"></button>
    </div>
    <input class="edit">
</li>
<li class="active" data-index="1">
    <div class="view">
        <input class="toggle" type="checkbox">
        <label>Spring</label>
        <button class="destroy"></button>
    </div>
    <input class="edit">
</li></ul>

现在,如何根据
索引获取
li
元素,并
单击相应的
复选框

您可以使用
xpath
查找
数据索引=1的元素

driver.findElement(By.xpath("//li[@data-index='1']//input[@class='toggle']"));
或使用
css选择器

driver.findElement(By.cssSelector("[data-index='1'] .toggle"));
要单击与祖先
  • 节点索引属性相关的复选框元素,可以使用以下任一选项:

    • CSS选择器:

    • xpath:


    您可以通过@Guy给您的答案直接找到您要查找的元素,如果您确切知道数据索引属性将设置为什么,这将是正确的方法,但您也可以找到li元素的集合,然后在每个元素中执行您需要的操作,如下所示:

    var container = driver.findElement(By.id("todo-list"));
    
    var elements = container.findElements(By.tagName("li"));
    

    对于元素,您可以循环遍历每个元素,也可以直接转到所需的元素。

    谢谢,但我无法根据文本spring进行比较,我只想根据索引选择一个元素,我只是以spring为例。你能告诉我这个的正确语法吗?接下来我想点击它的切换复选框,怎么做,你能告诉我现在我还有一个小问题,一旦我得到了特定的
    li
    元素,如果我想用class
    destroy
    点击它里面的按钮,怎么做?我在li之后使用xpath方法访问按钮,但我遇到了错误。@学习者用
    按钮替换
    输入
    ,有效地
    ul#todo list li。活动的[data index='1']按钮
    我们能用xpath做同样的过程吗?@learner Effective xpath:
    /ul[@id='todo-list']//li[@class='active'和@data index='1']//按钮
    对于此按钮操作,我收到错误,因为
    元素不可交互异常
    driver.findElement(By.cssSelector("ul#todo-list li.active[data-index='1'] input")).click();
    
    driver.findElement(By.xpath("//ul[@id='todo-list']//li[@class='active' and @data-index='1']//input")).click();
    
    var container = driver.findElement(By.id("todo-list"));
    
    var elements = container.findElements(By.tagName("li"));