Проблема с запросом XPath в IE - PullRequest
1 голос
/ 14 июля 2011

Я борюсь с этой проблемой весь день, но безрезультатно.Я использую Selen Webdriver и хочу получить две строки по xpath:

<input id="FB_childRec1_0" type="hidden" value="child12_0,child22_0,child13_0,child23_0,child14_0,child24_0" size="1"/>

и

<input id="FB_childRec4_0" type="hidden" value="child15_0,child25_0,child16_0,child26_0,child17_0,child27_0,child18_0,child28_0,child19_0" size="1"/>

из этого кода:

<tbody>
    <input id="cidChild1_0" type="hidden" value="T3$PATENT$US7381548B220080603"/>
    <input id="cidChild1_0" type="hidden" value="T3$PATENT$US7381548B220080603"/>
    <tr id="FORWARD_1US7381548B220080603_0" class="alternate" style="" name="childTR">
        <td class="tborder leftAlignment" rowspan="1" style="width:1%">
        <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%">
        <input id="FB_childRec1_0" type="hidden" value="child12_0,child22_0,child13_0,child23_0,child14_0,child24_0" size="1"/>
        <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%">
        <td class="frmData tborder vTop" align="left" rowspan="1" colspan="5">Forward Citation - (Displaying 3 forward citations)</td>
    </tr>
    <input id="cidChild4_0" type="hidden" value="T3$PATENT$US7381548B220080603"/>
    <tr id="BACKWARD_4US7381548B220080603_0" class="alternate" style="" name="childTR">
        <td class="tborder leftAlignment" rowspan="1" style="width:1%">
        <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%">
        <input id="FB_childRec4_0" type="hidden" value="child15_0,child25_0,child16_0,child26_0,child17_0,child27_0,child18_0,child28_0,child19_0" size="1"/>
        <td class="tborder leftAlignment vTop" rowspan="1" style="width:1%">
        <td class="frmData tborder vTop" align="left" rowspan="1" colspan="5">Backward Citation - (Displaying 14 backward citations)</td>
    </tr>
</tbody>

Я использую такой запрос xpath: //tbody/tr[@id[contains(.,'US7381548B2')]]//input

В коде это:

driver.FindElements(By.XPath("//tbody/tr[@id[contains(.,'" + queryArray[i] + "')]]//input"));

В Firefox все отлично работает, и я могу получить 2 элемента.Но в IE FindElements () ничего не находит.Я пробовал это на IE8 и IE9 безрезультатно.Я обновил Selenium WebDriver до 2.0.0, но это не помогает.Тогда я думаю, что, возможно, приложение дает разные исходники для FF и IE.Поэтому я сохраняю страницу из IE и открываю ее с помощью FF.Firepath показывает мне два совпадения, поэтому источник один и тот же.

Все это заставляет меня думать, что это какая-то ошибка селена, потому что я сталкиваюсь с такой проблемой во второй раз.Есть много тем с похожей проблемой - запросы xpath работают в FF, но не работают в IE.Но я не могу найти причину этого.

Что может вызвать такое странное поведение селена?И что мне делать, чтобы решить проблему?

Ответы [ 4 ]

1 голос
/ 16 июля 2011

Существуют некоторые различия в настройке DOM в FF и IE, особенно с тегом tbody. Попробуйте удалить tbody из XPath:

//tr[@id[contains(.,'US7381548B2')]]//input

также поместите input в <td>.

0 голосов
/ 02 апреля 2014

Шаг 1: Получить локаторы для 2 входных элементов управления

Локатор для FB_childRec1_0: css = .alternate [id * = 'FORWARD']> input [id * = 'FB_childRec']

Локатор для FB_childRec4_0: css = .alternate [id * = 'BACKWARD']> input [id * = 'FB_childRec']

Итак, из вышеупомянутых локаторов Все операции, которые можно выполнить, будут выполнены.

0 голосов
/ 05 марта 2012

IE8 поддерживает document.documentElement.contains (), но не document.contains ().

Возможно, это сбивает с толку взаимодействие как селена, так и IE.

Попробуйте установить для свойства allowNativeXpath () значение false.

0 голосов
/ 14 июля 2011

Попробуйте двойную косую черту перед тем, как вход перепишется с одной косой чертой:

//tbody/tr[@id[contains(.,'US7381548B2')]]/input

Может быть, XPath не нравится?

...