2013-02-25 20 views
0

我有一些關於硒RC xpath的問題。我已經做了一些xpath字符串來匹配某些字段,無論id(全部是自動生成的)。Selenium RC xpath與firefox/xpath可視化器不同?

我的Xpath與表中的某個元素匹配的條件。 這裏是我的html代碼

<table style="width:900px;"> 
    <tbody> 
     <tr> 
      <td colspan="2"> 
       <span class="header" id="ctl00_ContentPlaceHolder_ctl07">Nowy wniosek </span> 
       <span class="description" id="ctl00_ContentPlaceHolder_ctl08"></span> 
       <span></span> 
      </td> 
     </tr> 
     <tr> 
      <td width="34%" valign="top" bgcolor="#ffffc7"> 
       <span>Status wniosku</span> 
       <span></span> 
      </td> 
      <td width="66%" bgcolor="#ffffc7"> 
       <input type="text" scriptattrib="scriptAttribstring" class="baseCtrl" id="ctl00_ContentPlaceHolder_1020" readonly="readonly" value="Nowy wniosek" name="ctl00$ContentPlaceHolder$1020"/> 
       <span> </span> 
       <span class="ctrlDescrpt">(Pole nie do edycji)</span> 
       <span> </span> 
       <span style="display:none;" class="validation" id="ctl00_ContentPlaceHolder_ctl21"></span> 
       <span></span> 
      </td> 
     </tr> 
     <tr> 
      <td width="34%" valign="top"> 
       <span>Wykonaj akcję</span> 
       <span></span> 
      </td> 
      <td width="66%"> 
       <select class="baseCtrl" id="ctl00_ContentPlaceHolder_1021" name="ctl00$ContentPlaceHolder$1021"> 
        <option value="save">zapisz</option> 
        <option value="send">wyślij do przełożonego</option> 
        <option value="cancel">anuluj</option> 
       </select> 
       <span> </span> 
       <span style="display:none;" class="validation" id="ctl00_ContentPlaceHolder_ctl32"></span> 
       <span></span> 
      </td> 
     </tr> 
     <tr style="display: none;"> 
      <td width="34%" valign="top" bgcolor="#ffffc7"> 
       <span>Wykonaj akcję</span> 
       <span></span> 
      </td> 
      <td width="66%" bgcolor="#ffffc7"> 
       <select class="baseCtrl" id="ctl00_ContentPlaceHolder_1024" name="ctl00$ContentPlaceHolder$1024"> 
        <option value="save">zapisz</option> 
        <option value="send2">prześlij dalej(ścieżka oddziały)</option> 
       </select> 
       <span> </span> 
       <span style="display:none;" class="validation" id="ctl00_ContentPlaceHolder_ctl43"></span> 
       <span></span> 
      </td> 
     </tr> 
     <tr> 
      <td width="34%" valign="top" bgcolor="#ffffc7"> 
       <span>Uwagi</span> 
       <span></span> 
      </td> 
      <td width="66%" bgcolor="#ffffc7"> 
       <textarea scriptattrib="scriptAttribstring" class="baseCtrl" id="ctl00_ContentPlaceHolder_1022" readonly="readonly" cols="20" rows="5" name="ctl00$ContentPlaceHolder$1022"></textarea> 
       <span> </span> 
       <span style="display:none;" class="validation" id="ctl00_ContentPlaceHolder_ctl65"></span> 
       <span></span> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <span></span> 
      </td> 
     </tr> 
    </tbody> 
</table> 

這裏是我的Xpath

//span[text()='Wykonaj akcję']/parent::*/parent::*[not(contains(@style,'display: none'))]/child::*/following-sibling::*[not(contains(@style,'display: none'))]//select[not(contains(@disabled,'disabled'))] 

問題如下。根據記錄的人員或某些業務邏輯,表格可見或不可見。 我試過讓表格的TR元素不能包含樣式顯示:none ;.

當我在firefox或xpath可視化器中測試xpath時,一切似乎都沒有問題。

我的Selenium代碼雖然由於某種原因返回隱藏的元素。 (返回最後一個匹配元素,對於他來說隱藏的元素是一個匹配)。我不知道是什麼原因。能再給它一些亮光嗎?

另外這是我的Selenium代碼。

var localizator = LocalizatorGenerators.SelectOptionLocator(labelName); 
       var id = selenium.GetAttribute(localizator + "@id"); 
       selenium.SeleniumValidate(value, type, id); 
       selenium.Select(string.Format("id={0}", id), value); 



public static string SelectOptionLocator(string labelName) 
     { 
      var xpath = 
       String.Format(
        "//span[text()='{0}']/parent::*/parent::*[not(contains(@style,'display: none;'))]/child::*/following-sibling::*[not(contains(@style,'display: none;'))]//select[not(contains(@disabled,'disabled'))]", labelName); 
      return xpath; 
     } 

回答

0

這是一個非常可怕的XPath定位器。 parent::*following-sibling::*的各種組合使預測這種情況非常困難。但既然你要確定什麼是select id="ctl00_ContentPlaceHolder_1021"不使用其id值,試試這個:

//tr[not(contains(@style,'display: none'))]/td/[span[text()='Wykonaj akcję']]/td/select[@disabled != 'disabled'] 
+0

呀XPath是可怕的,我知道,但不能找到一個更好的。您發佈的內容並不奏效,因爲它旨在挑選錯誤的元素。 TD的跨度和實際數據是兄弟姐妹,不像你設計的父母和孩子。您的評論雖然對我來說足夠有幫助,但找到了解決方案// tr [not(contains(@ style,'display:none'))]/td/span [text()='Wykonajakcję'] // parent :: * //下面的兄弟姐妹:: * /選擇[不(包含(@禁用,'禁用'))]感謝您的幫助! :) – Shuffler 2013-02-26 15:10:45

+0

我仍然有以下xpath的問題。在firefox firePath中,禁用的元素未被選中,但在Selenium中禁用的值仍然可以更改。任何原因可能是什麼原因? – Shuffler 2013-02-27 09:11:25

+0

對不起,我再次測試它,我仍然無法正常工作。它適用於firefox firepath和可視化器,但不能作爲硒定位器。我會選擇所需的跨度文本而不是未隱藏的文本。 – Shuffler 2013-02-27 16:02:57