t.me/atinfo_chat Telegram группа по автоматизации тестирования

Selenium Webdriver работа с HTML таблицами.


(Alex2a) #1

приветствую всех!

подскажите такой вопрос, автоматизирую тест web-странички на которой есть таблица.

используемые технологии:

  • webdriver Selenium 2
  • lanquage Ruby 1.8.7
  • pages framework Taza

прежде работал с watir webdriver, и вот как это выглядело:

например есть таблица (2 ряда, 2 столбца):

<table>
<tr><td>Name</td> <td>ID</td>
<tr><td>Aleks</td><td>1</td>
<tr><td>Alex</td> <td>2</td>
</table>

количество рядов динамическое.

Taza file:

element(:profiles_table) { browser.table(:index, 1) }
    table(:profiles) do
        
        element(:name) { row.cell(:index, 1) }
        element(:id) { row.cell(:index, 2)}
    end

 

test file:

row = page.element.row(:name => "Alex")
puts row.id.text

этот код вернет мне ID соответствующее имени Alex

 

попробовал сделать тоже самое для selenium webdriver, но не работает.

подскажите имел ли кто-нибудь опыт работы c этим?

спасибо.

 


(Taras) #2

вам нужно обертку к таблицам найти в интернете написаную для веб драйвера
погуглите tables selenium webdriver


(Mykhailo Poliarush) #3

нативных средств работы с таблицами в самом вебдрайвере нету, вы можете доступаться только к элементу и неважно (для вебдрайвера), какого он типа

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

 

// Grab the table 

WebElement table = driver.findElement(By.id(searchResultsGrid));

// Now get all the TR elements from the table

List<WebElement> allRows = table.findElements(By.tagName(“tr”));

// And iterate over them, getting the cells

for (WebElement row : allRows) {

List<WebElement> cells = row.findElements(By.tagName(“td”));

for (WebElement cell : cells) {

// And so on 

}

}

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

реализовать его не так уж сложно.

аналог кода на руби я думаю вы сможете найти.


(Alex2a) #4

спасибо за ответы.

пока такое решение:

 

a=Array.new

# сохраняем все элементы одного столбца в массив

browser.find_elements(:xpath => "//table[@id='booktable']/tbody/tr/td[1]").each do |r|
       a.push(r.text)
end

# находим индекс необходимого элемента

index = (a.index "VALUE")+1

 

# печатаем значение другого столбца этого ряда
puts (browser.find_element(:xpath => "//table[@id='booktable']/tbody/tr[#{index}]/td[2]").text)
 


(Виталий Коряков) #5

А в питоне есть подобные средства для работы с таблицами в Вебдрайвере? Или придется придумывать свой велосипед?