Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium RC xpath与firefox/xpath可视化工具不同?_Xpath_Selenium_Rc - Fatal编程技术网

Selenium RC xpath与firefox/xpath可视化工具不同?

Selenium RC xpath与firefox/xpath可视化工具不同?,xpath,selenium,rc,Xpath,Selenium,Rc,我有一些关于selenium如何使用xpath的问题。我制作了一些xpath字符串来匹配某些字段,而不考虑ID(所有字段都是自动生成的) 我的Xpath将表中的元素与特定条件匹配。 这是我的html代码 <table style="width:900px;"> <tbody> <tr> <td colspan="2"> <span class="header" i

我有一些关于selenium如何使用xpath的问题。我制作了一些xpath字符串来匹配某些字段,而不考虑ID(所有字段都是自动生成的)

我的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>
问题如下。表是否可见取决于记录的人员或背后的某些业务逻辑。 我已经试着使表的TR元素不能包含style display: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定位器。您的
父项::*
以下兄弟项::*
的各种组合使得预测这两者的匹配非常困难。但由于您试图识别的是
select id=“ctl00\u ContentPlaceHolder\u 1021”
而不使用其
id
值,请尝试以下操作:

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

是的,xpath很糟糕,我知道,但找不到更好的。你发布的那个不起作用,因为它是为了挑选错误的元素而设计的。带有span和实际数据的TD是兄弟姐妹,不像u设计的父和子。不过,您的评论对我很有帮助,我找到的解决方案是//tr[not(contains(@style,'display:none'))]/td/span[text()='Wykonaj akcję']//家长::*//以下兄弟姐妹::*/select[not(contains(@disabled,'disabled'))]谢谢您的帮助!:)我仍然有以下xpath的问题。在firefox firePath中,禁用元素未被选中,但在Selenium中,禁用值仍然可以更改。任何原因可能是什么原因?对不起,我再次测试了它,但我仍然无法工作。它可以与firefox firepath和可视化工具配合使用,但不能作为selenium定位器。我总是选择最后一个具有所需跨度文本的元素,而不是未隐藏的元素。
//tr[not(contains(@style,'display: none'))]/td/[span[text()='Wykonaj akcję']]/td/select[@disabled != 'disabled']