2017-06-21 105 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]"));