当前位置: 首页 > 知识库问答 >
问题:

使用selenium xpath动态查找前一个同级元素

冯风史
2023-03-14

我正在为以下代码编写selenium脚本。

<div id="abc" class="ui-selectmanycheckbox ui-widget hpsapf-chechkbox">
     <div class="ui-chkbox ui-widget">
        <div class="ui-helper-hidden-accessible">
           <input id="abc:0" name="abc" type="checkbox" value="0" checked="checked">
        </div>
        <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default ui-state-active">
           <span class="ui-chkbox-icon ui-icon ui-icon-check ui-c"></span>
        </div>
     </div>
     <span class="hpsapf-radio-label">
        <label for="abc:0">Herr</label>
     </span>
     <div class="ui-chkbox ui-widget">
        <div class="ui-helper-hidden-accessible">
           <input id="abc:1" name="abc" type="checkbox" value="1">
        </div>
        <div class="ui-chkbox-box ui-widget ui-corner-all ui-state-default">
           <span class="ui-chkbox-icon ui-icon ui-icon-blank ui-c"></span>  
        </div>
     </div>
     <span class="hpsapf-radio-label">
        <label for="abc:1">Frau</label>
     </span>
</div>

这些是如下所示的复选框。复选框的数量将根据数据库值进行更改。

在我的代码中,我首先检查是否选中了“Frau”复选框。所以我试着按照这个片段。

WebElement mainElement= driver.findElement(By.id("abc"));
WebElement label=mainElement.findElement(By.xpath(".//label[contains(@for,'abc')][text() = 'Frau']"));
WebElement parent = label.findElement(By.xpath(".."));
WebElement div = parent.findElement(By.xpath("preceding-sibling::::div"));
WebElement checkBox = div.findElement(By.className("ui-chkbox-box"));
String css = checkBox.getAttribute("class");
if(css.contains("ui-state-active")) {
    return "checked";
}
else
{
    return "unchecked";
}

但是当我试图执行这个脚本时<代码>WebElement div=父级。findElement(By.xpath(“前面的同级:::div”)给我第一个div标记,而不是前一个。我想要一个兄弟姐妹。

共有1个答案

潘弘博
2023-03-14

使用和索引,而不是

WebElement div = parent.findElement(By.xpath("preceding-sibling::div[1]"));
 类似资料:
  • 我正在使用Selenium来自动化一些测试。我对硒有点陌生。因此,我试图验证一个表单。有些字段带有星号,表示必填字段。我目前正在遍历所有可见字段,然后检查前面的元素是否有标签。我还需要检查标签是否有星级。我不太擅长这个xpath的东西,所以任何帮助都将不胜感激。 还有我的HTML结构,其中一些结构有星形类,而另一些没有:

  • 本文向大家介绍使用jquery prev()方法找到同级的前一个元素,包括了使用jquery prev()方法找到同级的前一个元素的使用技巧和注意事项,需要的朋友参考一下 检索每个段落,找到类名为 "selected" 的前一个同胞元素: .prev() 方法允许我们在 DOM 树中搜索这些元素的前一个同胞元素,并用匹配元素构造一个新的 jQuery 对象。 .prev()方法找到的是当前元素的同

  • 我有以下从一个网页简化的HTML... 需要以下XPath选择条件... col-md-3 div内的输入标记,该标记紧接在包含class=manditional的span的col-md-3 div之后 输入标记不应隐藏 上面HTML中的以下元素与搜索条件匹配 (请注意,ID中的数值是动态分配的,在搜索文档时我不会知道。) 在添加任何前一种兄弟检查之前,这是我的....

  • 问题内容: 我正在使用Selenium,需要获取控件的ID,但是ID是动态的,我无法获取。 数字1122是动态的,并且其他按钮的开头相同。 问题答案: 我已经多次回答类似的问题,您可能想看看。 ExtJS页面很难测试,尤其是在查找元素时。 以下是一些我认为有用的提示: 永远不要使用动态生成的ID。喜欢 永远不要使用绝对/无意义的XPath,例如 利用有意义的自动生成的部分ID和类名。(因此,在我的

  • 我在JavaSelenium中运行测试,在那里我找到一个元素,一旦找到就需要找到紧接在前的元素。代码需要是动态的,因为我不知道我开始的元素是5个中的第3个、10个中的第6个还是2个中的第1个。 问题是,使用xpath中的前置兄弟,我得到了找到的元素之前的所有元素,而不是紧接在它之前的元素。例如,这是我的xml: 假设我已经找到了作为WebElement的“Value 2”标签,那么我接下来要做的就

  • 问题内容: 在这种情况下,需要将元素滚动到视口中。问题是我不知道哪个元素是可滚动的。例如,在“纵向”中,身体是可滚动的,在“横向”中,身体是其他的元素(还有更多情况会更改可滚动的元素) 现在的问题是,给定需要滚动到视口中的元素,找到其第一个可滚动父级的最佳方法是什么? 我在这里设置了一个演示。使用按钮,您可以在两种不同情况之间切换 主体可以滚动或 有什么建议么 ? 问题答案: 只需检查滚动条是否可