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;
}
呀XPath是可怕的,我知道,但不能找到一個更好的。您發佈的內容並不奏效,因爲它旨在挑選錯誤的元素。 TD的跨度和實際數據是兄弟姐妹,不像你設計的父母和孩子。您的評論雖然對我來說足夠有幫助,但找到了解決方案// tr [not(contains(@ style,'display:none'))]/td/span [text()='Wykonajakcję'] // parent :: * //下面的兄弟姐妹:: * /選擇[不(包含(@禁用,'禁用'))]感謝您的幫助! :) – Shuffler 2013-02-26 15:10:45
我仍然有以下xpath的問題。在firefox firePath中,禁用的元素未被選中,但在Selenium中禁用的值仍然可以更改。任何原因可能是什麼原因? – Shuffler 2013-02-27 09:11:25
對不起,我再次測試它,我仍然無法正常工作。它適用於firefox firepath和可視化器,但不能作爲硒定位器。我會選擇所需的跨度文本而不是未隱藏的文本。 – Shuffler 2013-02-27 16:02:57