2016-11-08 2 views
1

Я пытаюсь искать элементы по XPath с WebDriver селена:Почему я должен искать явно относительные элементы в Selenium по xpath?

WebElement element1 = driver.findElement(By.id("someID")); 
List<WebElement> xPathElements = element1.findElements((By.xpath("//span[@class='someClass']"))); 

С помощью этого кода я получаю все элементы с классом = «SomeClass» в DOM.

Только когда я добавляю "." в начале строки XPATH я получаю все элементы с классом = «SomeClass», которые находятся под element1

element1.findElements((By.xpath(".//span[@class='someClass']"))); 

Какой смысл здесь? Я позвонил findElements от element1, поэтому по умолчанию он должен искать элементы, которые находятся под element1. Почему я должен добавить «.»?

ответ

1

Это не имеет никакого отношения к Селену, это способ, которым работает xpath.

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

1

. - выберите текущий узел

// - Выбирает узлы документа из текущего узла, который соответствует выбору, независимо от того, где они находятся. Поскольку текущий узел не указан, он будет искать везде.

So .// означает поиск везде внутри текущего узла.

В вашем случае:

//span[@class='someClass'] is //span[@class='someClass']

.//span[@class='someClass'] is element1//span[@class='someClass'] 

See - xpath syntax

 Смежные вопросы

  • Нет связанных вопросов^_^