Интерпретация XPath с помощью Selenium / WebDriver, управляющего IE - PullRequest
5 голосов
/ 04 мая 2011

Я пытаюсь использовать Selenium RC и WebDriver (отдельно) для управления HTML-страницей. Источник содержит что-то вроде:

<a href="/logoff"><span>
    <span>L</span>
    ogoff
    </span>
</a>

Я хочу настроить таргетинг на ссылку, которая содержит текст «Выход из системы», чтобы он продолжал работать, даже если они переделывают промежутки. Я использую XPath, поскольку он должен работать как в WebDriver, так и в Selenium RC. Это работает в IE, но немного хрупко:

//a[contains(., 'ogoff')]

и это было бы более надежно, но не работает:

//a[.='Logoff']

Можете ли вы объяснить, почему второй не работает? В частности, как . следует интерпретировать как строку, и как это делают Selenium и WebDriver?

Я пытаюсь заставить Selenium работать и с Firefox, чтобы открыть еще один чайник с червями.

Ответы [ 2 ]

10 голосов
/ 04 мая 2011

Есть пробелы (пробелы и возврат каретки), которые воспринимаются процессором как значимые и влияющие на вычисленное значение a.

Когда вы выбираете значение a, как это *<xsl:value-of select="a"/>*, результат будет:

* L
    ogoff
     *

Если вы используете *<xsl:value-of select="normalize-space(a)"/>*, результат будет:

*L ogoff*

Если вы хотите иметь возможность выбрать «Выход из системы», вы можете использовать normalize-space(), а затем обернуть его с помощью translate() для удаления пробелов:

//a[translate(normalize-space(), ' ','')='Logoff']
2 голосов
/ 04 мая 2011

Для Selenium вы можете указать его как link="Logoff", где Logoff - текст ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...