2017-06-21 47 views
0

私はちょうどセレンC#で作業を開始しました。 私はツリービューを持っていて、その位置が矛盾しているので、展開されていない場合は展開したいのですが、既に展開されている場合はそのままにしてください。倒壊に似ています。ツリーは セレン拡大縮小ツリービュー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> 

であり、私は現在、上記のXPathがあれば正常に動作

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; 
} 

を使用していたときにこれがあります適切なアクションが呼び出されます。 しかし、私は現在の状態に関係なくツリーの展開と折りたたみのための汎用アクション関数が必要です。

テキストを使用してツリービューノードの現在のクラス名を取得しようとしました。 ここで私は現在のクラス "rtPlus"または "rtMinus"を取得しようとしています しかし、前の兄弟をスパンとしてタグ名を使って取得しようとすると、クラス "rtsp"でタグスパンを取得していて、クラス "rtPlus 」または 『rtMinus』 にもかかわらず、検査の前の兄弟スパンがクラスを持って示して 『rtPlus』または 『rtMinus』私はあなたが複数のFindElementをチェーン始める場合は特に、注意が必要です

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を使用しています

XPathを一緒に使用します。あなたのシナリオでは、私は一つだけのXPathを利用することによって、それをシンプルに保つでしょう:

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

説明:

  • //span[text()='" + text + "'] - 与えられたtext
    • <span class="rtIn">Roles</span>
  • <span>を選択します
  • /parent::div -を選択の親
    • <div class="rtTop">
  • /span[2] - 親内で、インデックス2で<span>を選択(かかわらず<span>が展開または縮小されている場合の)
    • <span class="rtPlus"></span>

関連する問題