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