2014-02-05 4 views
2

Я создаю структуру для проверки данных с использованием селена. Проблема, с которой я борюсь, заключается в том, что я хочу найти элемент «td» (тег html) в элементе «tr» (тег html). Это код, который я написал.Как найти элемент внутри элемента в селене

Iterator<WebElement> i = rows.iterator(); 
While(i.hasnext()){ 
List<WebElement> columns = row.findElements(By.tagName("td")); 
for(WebElement s:columns) 
{ 
    System.out.println("columnDetails : "+s.getText().toString()); 
} 
if(columns.isEmpty()) 
{ 
    ElementNotFoundException e = new ElementNotFoundException("No data in table"); 
    throw e; 
} 
Iterator<WebElement> j = columns.iterator();// does some other work 
ClusterData c = new ClusterData(); // does some other work 
ClusterDataInitializer.initUI(c, j, lheaders); // does some other work 
CUIData.put(c.getCN(), c); // does some other work 
} 

Теперь проблема с этим:

The Data from table which i am trying to fetch in arraylist

Я пытаюсь извлечь данные из строки (см табличных данных) в ArrayList и использовании, что ArrayList дальше. В настоящее время происходит то, что данные для заголовка столбца извлекаются в начале, когда я не использую. Мне нужны только данные строк. Я не могу определить правильный способ сбора данных только из строк таблицы. если XPATH таблицы поможет вам понять это правильно, то здесь детали:

Таблица заголовка xPath столбца имя кластера:

/html/body/table/tbody/tr[2]/td[2]/div[2]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/div/div/div/div/div[2]/div/div/div[2]/div/div/div[2]/div[2]/div/table/tbody/tr/td[2]/div/div[2] 

Строка таблицы (Таблица данных) xPath тестового кластера 01:

/html/body/table/tbody/tr[2]/td[2]/div[2]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/div/div/div/div/div[2]/div/div/div[2]/div/div/div[3]/div[2]/div/table/tbody/tr/td[2]/div/div/a 

Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще.

Я использую следующий код для извлечения данных строки из таблицы.

List<WebElement> rows = getElement(driver,sBy,"table_div_id").findElements(By.tagName("tr")); 

, где sBy = By.id и table_div_id = id из div, в котором таблица присутствует. Это извлекает все строки в arraylist, а затем я использую код для извлечения данных строки в другой arraylist. Здесь я застрял.

+0

Это выглядит как худший XPath я когда-либо видел! Разумеется, вы можете сделать его более простым и надежным. –

+0

Я скопировал его с помощью firebug и вставил его как есть. Не могу помочь, если xPath выглядит так. Так разработан продукт. Моя задача - создать инфраструктуру автоматизации. Но если вы дадите мне несколько указаний относительно того, как я могу сделать это проще, чтобы вы могли понять, я обязательно попытаюсь. :) – Avataar17

ответ

4

Каждая строка из таблицы находится в своем собственном «стол» тега так следующие вещи не работают: -

List<WebElement> rows = driver.findElements(By.xpath("//div[@id = 'table_div_id']//tr")); 
List<WebElement> columns = row.findElements(By.xpath("./td")); 

или подход, который я использовал для предыдущей версии продукта т.е.

List<WebElement> columns = row.findElements(By.tagName("td")); 

Итак, я использовал следующий подход, который позволил мне захватить все видимые строки из таблицы.

List<WebElement> columns = row.findElements(By.xpath(".//table[@class='gridxRowTable']/tbody/tr")); 

Но после того, что я столкнулся с другой проблемой, которая с тех пор эта таблица была реализована с использованием додзё, скроллинг был невозможен, и Селен только смог захватить видимые строки, так, чтобы преодолеть это я масштаб изображения в браузере с помощью селен. Вот как я достиг своей цели получения данных. Я считаю, что другие могли бы дать мне ответ, если бы я поделился некоторыми подробностями. Тем не менее, сожалею об этом и надеюсь, что мой ответ поможет всем вам.

1

вместо

List<WebElement> columns = row.findElements(By.tagName("td")); 

попробуйте использовать

List<WebElement> columns = row.findElements(By.xpath("./td")); 

Проверьте, если это помогает. Это должно дать вам элементы td. Если я не понял вашу проблему, дайте мне знать.

+0

Я пробовал ваше предложение, но оно все еще только собирает данные для заголовков таблиц, и я не могу выбрать данные строк таблицы. – Avataar17

+0

ОК. скажите мне, как вы получаете «строки» в этой строке, Iterator i = rows.iterator(); укажите код, как вы получаете строки. –

+0

Редактировать сообщение. вы не можете добавить код здесь в комментарии –

0

У вас есть Selenium IDE? Выполните операцию storeText в строке, которую вы хотите получить, тогда xpath будет заселен в среде IDE. Будет несколько xpaths; наиболее надежным является xpath:position, используйте это для захвата ваших строк.

И используйте firebug для лучшей видимости вашего AUT.

Firebug и Selenium IDE являются основным компонентом разработки Selenium Framework.

Вы можете манипулировать xpath, как хотите.

+0

Я не использовал IDE, так как код полностью разработан с использованием Selenium Webdriver. Существуют и другие аспекты, которые невозможно реализовать с помощью IDE. Мы начали с IDE, но затем переключились на селен-webdriver для повышения производительности и расширения возможностей тестовых корпусов. – Avataar17

+0

Я не думаю, что IDE имеет какое-либо отношение к разработке WEbDriver. Он просто используется для записи и воспроизведения. Это помощник, но не ЗАМЕСТИТЕЛЬ. –

0

Вы можете использовать этот

ПУТЬ
driver.findElement(By.Xpath("//table[@id=\"table1\"]/tbody/tr[2]/td[1]")); 

С уважением,

Anuja

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