Написание XPath для элементов, которые не имеют идентификатора или имени в Selenium - PullRequest
0 голосов
/ 27 марта 2009

Я пытаюсь автоматизировать тестирование кода ... ну, написано без учета тестирования (нет идентификаторов для многих элементов и много элементов с одинаковыми именами классов). Буду признателен за любую помощь (вопросы под кодом):

<div id="author-taxonomies" class="menu-opened menu-hover-opened-inactive" onmouseover="styleMenuElement(this)" onmouseout="styleMenuElement(this)" onclick="toggleSFGroup(this)">Author</div>
<div id="author-taxonomies-div" class="opened">
    <div id="top-level-menu" class="opened">
        <div id="top-level-menu-item-1" class="as-master">
            <div class="filter-label"> Name</div>
        </div>
        <div id="top-level-menu-item-1" class="as-slave"
            style="top: 525px; left: 34px; z-index: 100; display: none;"> </div>
        <div id="top-level-menu-item-2" class="as-master">
            <div class="filter-label">Title</div>
        </div>
        <div id="top-level-menu-item-2" class="as-slave">
            <div id="top-level-menu-item-2" class="as-slave-title as-slave-title-subgroup"
                >Title</div>
            <div id="top-level-menu-item-2" class="as-slave-body"> </div>
            <div class="as-slave-buffer"> </div>
        </div>
        <div id="top-level-menu-item-3" class="as-master">
            <div class="filter-label">Location</div>
        </div>
        <div id="top-level-menu-item-3" class="as-slave"> </div>
    </div>
</div>

Вопрос в том, как связать определенные метки этого меню и свойства с выражениями xPath? Например, если я хочу:

  1. проверьте, есть ли ярлык "Местоположение"
  2. проверить, не отображается ли "Заголовок" с классом "как ведомый" в данный момент

Ответы [ 5 ]

4 голосов
/ 27 марта 2009

Было бы что-то похожее на:

  1. // ДИВ [@ ID = "верхнего уровня меню пункт-3"] / дел [@ класс = "фильтр-ярлыком"]
  2. // div [@ id = "top-level-menu1"] --- и проверьте код для отображения: нет ... при условии, что вы используете * selec rc

Обновление: также обязательно установите следующее дополнение Firefox, это действительно полезно при попытке использовать различные выражения xpath на сайте https://addons.mozilla.org/en-US/firefox/addon/1095

3 голосов
/ 29 марта 2009

В качестве примечания: старайтесь по возможности избегать использования локаторов xpath в Selenium. Если у вас длинное выражение xpath, Selenium может найти в 20 раз медленнее, чтобы найти элемент, чем идентифицировать его по уникальному идентификатору. Конечно, иногда нет альтернативы использованию xpath. Тем не менее, когда вы его используете, сводите выражения «//» к минимуму - это реальный фактор снижения производительности.

2 голосов
/ 05 августа 2010

В настоящее время я работаю над библиотекой с открытым исходным кодом для генерации выражений xpath через свободный .Net API. Идея состоит в том, чтобы иметь возможность генерировать локаторы селена на основе xpath без знания xpath.

Вот пример использования библиотеки в вашем случае:

XPathFinder.Find.Tag ("div"). With.Attribute ("id", "top-level-menu-item-3"). And.Child ("div"). With.Attribute ("class "," метка фильтра "). ToXPathExpression ();

Это даст следующий xpath: "// DIV [@ ид = 'верхнего уровня меню пункт-3'] / дел [@ класс = 'фильтр-метка']"

Проверьте это на http://code.google.com/p/xpathitup/

2 голосов
/ 27 марта 2009

Если вы только начинаете работать с Selenium, скачайте дополнение selenium для Firefox. Когда вы нажимаете на элементы DOM, Selenium показывает xpath для доступа к нему.

0 голосов
/ 27 апреля 2012

Вы можете использовать firepath, который может быть установлен поверх firebug (оба плагина firefox). Когда вы получите xpath, не забудьте добавить // перед его использованием. Либо в коде, либо в селен IDE. Вы не добавляете его, поэтому его нельзя использовать. Существует два типа xpath: абсолютный и относительный. Если вы используете абсолют, тогда он позаботится о динамических идентификаторах. Но если вы используете относительный, он будет ломаться с каждым прогоном.

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