2015-09-08 2 views
3

Yo Dawg Я слышал, что вы, как веб-элементы ...Могу ли я получить веб-элемент внутри другого веб-элемента?

Так что я хотел бы знать, если это возможно, чтобы найти веб-элемент по классу, идентификатор или любой другой селектор, а затем в том, что найти другой элемент по класс и т.д.

фон

у меня есть контейнер с идентификатором, который содержит набор элементов, которые я хочу, чтобы поместить в список по классу, проблема заключается в том, что если я пытаюсь getElements(By.class) он подберет некоторые элементы за пределами, которых я не хочу.

Покушение

Я пытался сделать это с XPATH, но он чувствует себя грязным, как жесткое кодирование. Поскольку эти тесты должны быть надежными, я думал, что должен быть лучший способ сделать это.

Этот код фиксирует элементы за пределами того, что я хочу

public double checkStars(){ 
    List<WebElement> starsOn = driver.findElements(By.className("on")); 
    return starsOn.size(); 
} 

Вопрос

Могу ли я выбрать веб-элемент при ограничении поиска внутрь другого веб-элемента, и как это делается?

ответ

3

Да. Вы можете найти другой элемент внутри элемента, если этот элемент является дочерним элементом этого элемента. что-то вроде этого:

WebElement eleParent=driver.findElement(Locator); 
WebElement eleChild=eleParent.findElement(Locator); 

Будьте осторожны, если ваш локатор XPath !!!

+0

Thats действительно здорово, так что я могу захватить часть страницы, а затем посмотреть на коллекцию элементов только внутри этого. :) привет, Муннал, хороший краткий ответ –

+0

ваш прием. если это решает вашу проблему, вы можете принять ее как ответ! так что другие могут также быстро найти его. –

1

Вы должны взглянуть на селектор CSS. Это, как правило, более быстрый способ добиться этого. Вот простой пример для страницы google.com. Он захватывает две ссылки (A тегов) в правом верхнем углу, Gmail и изображения.

FirefoxDriver driver = new FirefoxDriver(); 
driver.get("https://www.google.com"); 
List<WebElement> links = driver.findElements(By.cssSelector("#gbw a.gb_P")); 
for (WebElement link : links) 
{ 
    System.out.println(link.getText().trim()); 
} 

Этот селектор CSS, #gbw a.gb_P, читается как найти элемент с идентификатором (#) gbw, который имеет дочерние A тегов с классом (.) gb_P. Селекторы CSS - очень мощные инструменты, которые могут делать довольно сложные вещи и быстрее и менее хрупкие (в общем), чем XPath.

CSS Selector reference

+0

Спасибо JeffC +1 за хороший краткий ответ. Моя проблема в том, что у меня есть некоторые элементы на странице с теми же селекторами css, и это не совсем их поймает. Но все же хороший ответ для тех, кто имеет доступ к изменению html и css. В качестве тестера я не могу его изменить. –

+0

Если вы можете использовать принятый ответ, где вы используете два разных локатора, вы, скорее всего, можете использовать этот ответ с помощью одного селектора CSS, который включает в себя оба локатора, - это то, что я пытался передать. Если вы предоставите некоторый HTML-код и элемент, который вы ищете, я могу помочь вам построить его ... если вы заинтересованы в этом. – JeffC