2016-01-14 6 views
3

Рассмотрим следующий пример, где известен идентификатор элемента ul, и мы хотим, чтобы Click() содержал его элемент li, если li.Text равно определенному тексту.Когда следует использовать XPath?

Вот два рабочих решения этой проблемы:


Метод 1: Использование XPath

ReadOnlyCollection<IWebElement> lis = FindElements(By.XPath("//ul[@id='id goes here']/li")); 
foreach (IWebElement li in lis) { 
    if (li.Text == text) { 
     li.Click(); 
     break; 
    } 
} 

Способ 2: Используя ID и тэгу

IWebElement ul = FindElement(By.Id("id goes here")); 
ReadOnlyCollection<IWebElement> lis = ul.FindElements(By.TagName("li")); 
foreach (IWebElement li in lis) { 
    if (li.Text == text) { 
     li.Click(); 
     break; 
    } 
} 

Мой вопрос: когда мы должны использовать XPath, а когда нет?

Я предпочитаю использовать XPath только при необходимости. Для этого конкретного примера я считаю, что XPath совершенно не нужен, но когда я просмотрел эту конкретную проблему в StackOverflow, кажется, что большинство пользователей по умолчанию используют XPath.

+1

Используйте все, с чем вам удобнее! Прочитайте недавнюю дискуссию здесь: http://stackoverflow.com/q/34521441/3124333 – SiKing

ответ

3

В данном конкретном случае, XPath может даже упростить задачу к одной линии:

driver.FindElement(By.XPath(String.Format("//ul[@id='id goes here']/li[. = '{0}']", text))).click(); 

В общем, хотя, если вы можете однозначно идентифицировать элемент с помощью простых By.Id или By.TagName или других подобных «простых» локаторов , сделай это. Выражения XPath и локаторы на основе селектора CSS обычно предоставляют расширенные способы поиска элементов (мы можем идти вверх/вниз/в сторону в дереве, использовать частичные атрибуты, подсчитывать элементы, определять их позицию и т. Д.) Или сделать местоположение элемента кратким, как в в этой конкретной ситуации.

0
  1. Когда вам нужно отслеживать более похожие веб-элементы, используйте XPATH.
  2. Когда вам нужно особенно один элемент использования ID

Xpath иметь больше преимуществ, потому что иногда идентификатор получить дубликат Это мой опыт!

+1

Но если id получить дубликат, это ошибка для исправления. Идентификатор должен быть уникальным на странице html. –

+0

Идентификатор уникален. Представьте себе, что вы работаете на сайтах третьих сторон, вот как вы решаете свою проблему с дубликат id без xpath. –

+0

Даже в JQuery вы не можете выбрать дублированный идентификатор, используя #. Итак, если вы работаете в качестве тестировщика на сайтах третьей стороны, ваш флагом является его ошибкой: ошибка кода и ошибка навигации. Но если вы действительно хотите игнорировать дублированный идентификатор, вы можете использовать xpath. То же самое, что вы можете запрограммировать с помощью быстрого исправления, но никто не хочет поддерживать ваш код, и сделать это будет трудно через несколько месяцев. –