2017-06-21 108 views
0

我刚开始使用硒c#工作。 我有一个树形视图,它的位置不一致,所以我想扩大它,如果它没有扩大,如果它已经扩大它应该是因为它。类似的崩溃。selenium expand collapse treeview 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工作正常,如果调用适当的操作。 但我想要一个通用操作函数来展开和折叠树,而不考虑它的当前状态。

我试图通过使用文本来获取treeview节点的当前类名称。 这里我想要获得当前类“rtPlus”或“rtMinus” ,但是当我尝试使用标记名称作为范围获得前面的兄弟姐妹时,我得到的类标记范围为“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

的XPath可能会非常棘手,特别是如果你开始链接多个FindElement和XPath一起。对于你的情况,我会保持它利用只有一个XPath的简单:

"//span[text()='" + text + "']/parent::div/span[2]" 

说明:

  • //span[text()='" + text + "'] - 选择<span>给定text
    • <span class="rtIn">Roles</span>
  • /parent::div - 选择<span>的父
    • <div class="rtTop">
  • /span[2] - 父内,选择<span>索引2(无论如果<span>展开或折叠)
    • <span class="rtPlus"></span>

代码:

IWebElement element = driver.FindElement(
    By.XPath("//span[text()='" + text + "']/parent::div/span[2]"));