我刚开始使用selenium c#。 我有一个树视图,它的位置不一致所以我想扩展它,如果它没有扩展,如果它已经扩展它应该是原样。类似的崩溃。
这是树扩展的时候
<div class="rtTop">
<span class="rtSp"></span>
<span class="rtMinus"></span>
<span class="rtIn">Roles</span>
</div>
这就是它崩溃的时候
<div class="rtTop">
<span class="rtSp"></span>
<span class="rtPlus"></span>
<span class="rtIn">Roles</span>
</div>
我正在使用
public static string treeviewExpand( string treeviewExpandButton)
{
treeviewExpandButton = "//span[text()='" + treeviewExpandButton + "']/preceding-sibling::span[@class='rtPlus']";
return treeviewExpandButton;
}
public static string treeviewCollapse(string treeviewCollapseButton)
{
treeviewCollapseButton = "//span[text()='" + treeviewCollapseButton + "']/preceding-sibling::span[@class='rtMinus']";
return treeviewCollapseButton;
}
如果调用适当的操作,上面的xpath工作正常。 但我想要一个通用动作函数来扩展和折叠树,而不管它当前的状态。
我试图通过使用文本获取树视图节点的当前类名。 在这里我试图让当前的班级“rtPlus”或“rtMinus” 但是当我尝试使用标签名称作为span来获取前面的兄弟时,我得到的标签跨度为“rtsp”类而不是类“rtPlus”或“rtMinus” 即使检查显示其前面的兄弟跨度有类“rtPlus”或“rtMinus”
我正在使用
public static string treeviewExpandCollapse(string treetext)
{
treetext= "//span[text()='" + treetext+ "']";
IWebElement element;
element = driver.FindElement(treetext).FindElement(By.XPath("./preceding-sibling::span"));
string calsss = element.GetAttribute("class");
Thread.Sleep(2000);
}
答案 0 :(得分:1)
XPath可能很棘手,特别是如果您开始将多个FindElement
和XPath链接在一起。对于您的场景,我只使用一个XPath来保持简单:
"//span[text()='" + text + "']/parent::div/span[2]"
说明:
//span[text()='" + text + "']
- 选择具有给定<span>
的{{1}}
text
<span class="rtIn">Roles</span>
- 选择/parent::div
的父级
<span>
<div class="rtTop">
- 在父级内,选择索引2处的/span[2]
(无论<span>
是展开还是折叠)
<span>
代码:
<span class="rtPlus"></span>