2012-03-15 32 views
0

私が見ているシナリオは、複数の列を持つ表があるということです。これらの列の1つに名前があり、別の列にはドロップダウンリストがあります。私は特定の名前を含む行のドロップダウンを操作する必要があります。ソース出力を見て、要素の祖父母(テーブル行)を取得してリストを検索できるようにしました。しかし、親オブジェクトを使用した場合、そのような検索機能はありませんでした。WatiNで親の兄弟要素の子を見つける

サイトの自動化/テストにはこのようなシナリオがたくさんあるようですが、数時間の検索後は何も見つかりませんでした。どんな助けもありがとう。

EDIT:問題のアプリケーションはASP.NETであり、出力HTMLはせいぜいgnarlyです。しかし、ここにHTMLが検索されているもののクリーンアップの例は次のようになります:私は私が望んで行う方法を発見した

<table class="myGrid" cellspacing="0" cellpadding="3" rules="all" border="1" id="ctl00_content_MyRpt_ctl01_MyGrid" style="border-collapse:collapse;"> 
    <tr align="left" style="color:Black;background-color:#DFDBDB;"> 
    <th scope="col">Name</th><th scope="col">Unit</th><th scope="col">Status</th><th scope="col">Action</th> 
    </tr> 
    <tr> 
    <td> 
     <span id="ctl00_content_MyRpt_ctl01_MyGrid_ctl02_Name">JOHN DOE</span> 
    </td> 
    <td> 
     <span id="ctl00_content_MyRpt_ctl01_MyGrid_ctl02_UnitType">Region</span>&nbsp; 
     <span id="ctl00_content_MyRpt_ctl01_MyGrid_ctl02_UnitNum">1</span> 
    </td> 
    <td> 
     <span id="ctl00_content_MyRpt_ctl01_MyGrid_ctl02_Status">Complete</span>         
    </td> 
    <td class="dropdown">               
     <select name="ctl00$content$MyRpt$ctl01$MyGrid$ctl02$ActionDropDown" onchange="javascript:setTimeout(&#39;__doPostBack(\&#39;ctl00$content$MyRpt$ctl01$MyGrid$ctl02$ActionDropDown\&#39;,\&#39;\&#39;)&#39;, 0)" id="ctl00_content_MyRpt_ctl01_MyGrid_ctl02_ActionDropDown" class="dropdown"> 
     <option value="123456">I want to...</option> 
     <option value="Details.aspx">View Details</option> 
     <option value="Summary.aspx">View Summary</option> 
     <option value="DirectReports.aspx">View Direct Reports</option> 
     </select> 
    </td> 
    </tr> 
    <tr> 
    ... 
    </tr> 
</table> 
+0

検索しているHTMLのサンプルを提供できますか? – MotoSV

+0

HTMLサンプルを追加する投稿を編集しました。 – iAmMe

答えて

0

。これはおそらく最高のソリューションまたは最も洗練されたソリューションではありませんが、動作します(実動コードではありません)。

private void btnStart_Click(object sender, EventArgs e) 
    { 
     using (var browser = new IE("http://godev/review")) 
     { 
      browser.Link(Find.ByText("My Direct Reports")).Click(); 
      TableRow tr = browser.Span(Find.ByText("JOHN DOE")).Parent.Parent as TableRow; 
      SelectList objSL = null; 
      if (tr.Exists) 
      { 
       foreach (var td in tr.TableCells) 
       { 
        objSL = td.ChildOfType<SelectList>(Find.Any) as SelectList; 
        if (objSL.Exists) break; 
       } 
       if (objSL != null && objSL.Exists) 
       { 
        Option o = objSL.Option(Find.ByText("View Direct Reports")); 
        if (o.Exists) o.Select(); 
       } 
      } 
     } 
    } 

これにより、時間と労力を節約できます。また、私は誰かがより良い解決策を持っているかどうかを見たいと思う。

関連する問題