selenium expand collapse treeview C#

时间:2017-06-21 13:28:35

标签: c# selenium telerik treeview telerik-mvc

我刚开始使用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);
}

1 个答案:

答案 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>