0

我有一些关于 selenium RC xpath 的问题。我已经制作了一些 xpath 字符串来匹配某些字段,而不管 ids (所有都是自动生成的)。

我的 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 元素不能包含样式 display: none;。

当我在 firefox 或一些 xpath 可视化工具中测试 xpath 时,一切似乎都很好。

我的 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;
        }
4

1 回答 1

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']
于 2013-02-25T23:36:27.910 回答