Selenium+Java: Динамические массивы и таблицы, помогите.
#1
Отправлено 06 декабря 2012 - 12:50
0.0 0.1 0.2 0.3 0.4 0.5 0.6
1.0 1.1 1.2 1.3 1.4 1.5 1.6
и тд.
Количество строк может меняться
на каждую ячейку таблицы ссылается css локатор по типу "css=table.grid.2.2"
Хотелось бы, чтобы при открытии страницы, все ячейки начиная с 2.0 и дальше, включались в массив или ArrayList.
Чтобы не приходилось заполнять его вручную для каждой новой появившейся строки.
В java, да и selenium новичок. На данный момент приходится смотреть на то сколько строк в таблице и заполнять ArrayList следующим образом:
ArrayList<String> TableGrid = new ArrayList<String>();
int str=2,stb=0;
for (str=2;str<6;str++) { // Для 6-ти строк
for (stb=0;stb<7;stb++) {
TableGrid.add("css=table.grid."+str+"."+stb);
Подскажите, как лучше реализовать?
#2
Отправлено 06 декабря 2012 - 14:18
int numRows = selenium.getXPathCount("//<наш тег>[contains(@css,'table.grid')]").intValue() - 2;
#3
Отправлено 06 декабря 2012 - 14:56
Спасибо, попробую. Но не уверен, что это поможет. Мне скорее интересен не сам подсчет строк, а то, чтобы все елементы с локатором css=table.grid.2.0 и более, попали в ArrayList.попробуйте посчитать строки, к примеру, так:
int numRows = selenium.getXPathCount("//<наш тег>[contains(@css,'table.grid')]").intValue() - 2;
#4
Отправлено 07 декабря 2012 - 07:55
хотел сделать следующим образом: int numRows = selenium.getCssCount("table.grid").intValue() - 2;
Вот что выдает в консоль: java.lang.UnsupportedOperationException: getCssCount
Возможно неверно описываю...
Быть может есть способ прикрутить driver.findElements(By.cssSelector());???
#5
Отправлено 07 декабря 2012 - 08:48
У меня тест выполняет подобную задачу, строки считаю таким образом:
List<WebElement> Rows = driver.findElements(By....("..."));
int rows = Rows.size() - 1;
#6
Отправлено 07 декабря 2012 - 09:23
Добрый, а можно подробней в части (By....("...")), по какому принципу вы их ищите? По css,name,id?Добрый день
У меня тест выполняет подобную задачу, строки считаю таким образом:
List<WebElement> Rows = driver.findElements(By....("..."));
int rows = Rows.size() - 1;
Каждой моей ячейке соответствует локатор css=table.grid.1.1 и тд.
при использовании List<WebElement> numRows=driver.findElements(By.cssSelector("table.grid"));
в List попадает лишь один элемент "[[[FirefoxDriver: firefox on XP (1c2f7373-f610-4de8-afb4-d6de2d740fdf)] -> css selector: table.grid]]"
Хотелось бы, чтоб попадали все.
#7
Отправлено 07 декабря 2012 - 09:39
List<WebElement> Rows = driver.findElements(By.xpath("//*[@id='result']/tbody/tr"));
подсчитываются все строки, далее их текст складываю в массив
#8
Отправлено 07 декабря 2012 - 09:49
Есть ли возможность собрать все ячейки? например:
driver.findElements(By.xpath("//form[@id='result']/div/table/tbody/tr[*]/td[*]"));
Использовать * вместо значений, пока количество не совпадает (
#9
Отправлено 07 декабря 2012 - 10:18
#10
Отправлено 07 декабря 2012 - 10:27
А пример кода не покажите?Можно сложить в массив данные всех ячеек, пробежав по таблице с помощью xpath-а, если Вам такой вариант подходит
Так же интересует добавление новых элементов в массив из файла.
Например: если месяц Июль, то считать данные из 1-ой строки, если Август, то из 2-й.
#11
Отправлено 07 декабря 2012 - 10:36
int columns = Columns.size();
List<WebElement> Rows = driver.findElements(By.xpath("//*[@id='result']/tbody/tr"));
int rows = Rows.size();
String[][] report = new String[columns][rows];
for(int i = 0; i < columns; i ++){
int current_col = 0;
for(int j = 0; j < rows; j ++){
report[current_col][j] = driver.findElement(By.xpath("//*[@id='..." + j + "']/td[" + i + "]")).getText();
}
report[current_col][rows] = driver.findElement(By.xpath("//*[@id='...']/td[" + i + "]")).getText();
}
//вывести на консоль записанное
System.out.println("-----------------------------------------------");
for(int i = 0; i < columns; i ++, System.out.println()){
System.out.print(report[i][0] + " |");
for(int j = 0; j < rows; j++){
System.out.print(report[i][j] + " |");
}
}
System.out.println("-----------------------------------------------");
Примерно так...
#12
Отправлено 07 декабря 2012 - 10:49
List<WebElement> Columns = driver.findElements(By.xpath("//*[@id='result']/table/tbody/tr[..]/td"));
int columns = Columns.size();
List<WebElement> Rows = driver.findElements(By.xpath("//*[@id='result']/tbody/tr"));
int rows = Rows.size();
String[][] report = new String[columns][rows];
for(int i = 0; i < columns; i ++){
int current_col = 0;
for(int j = 0; j < rows; j ++){
report[current_col][j] = driver.findElement(By.xpath("//*[@id='..." + j + "']/td[" + i + "]")).getText();
}
report[current_col][rows] = driver.findElement(By.xpath("//*[@id='...']/td[" + i + "]")).getText();
}
//вывести на консоль записанное
System.out.println("-----------------------------------------------");
for(int i = 0; i < columns; i ++, System.out.println()){
System.out.print(report[i][0] + " |");
for(int j = 0; j < rows; j++){
System.out.print(report[i][j] + " |");
}
}
System.out.println("-----------------------------------------------");
Примерно так...
Спасибо. Быть может присоветуете, что-то по поводу загрузки из файла?
#13
Отправлено 07 декабря 2012 - 11:24
List<WebElement> Rows=driver.findElements(By.xpath("//form[@id='Table']/div/table/tbody/tr[..]/td[..]"));
выяснилось, что в список попали не все элементы. Как оказалось на часть ячеек ссылаются только css локаторы.
Есть ли способ всё же выбрать все ячейки с их помощью? Что то типа аналогичного:
List<WebElement> RowsCss=driver.findElements(By.cssSelector("table.grid.[..].[..]"));
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных