2014-01-14 2 views
0

У меня есть datagrid, что мне нужно получить значение рядом с элементом, который я могу определить динамически.Selenium Webdriver - получить динамическое значение в datagrid

Что сценарий пытается сделать: Это HTML-форма Роли Datagrid, которая содержит имя роли и количество разрешений. Администратор будет нажимать на роль, появится диалоговое окно, и администратор обновит роль и сохранит. Количество ролей будет обновляться. Мой скрипт проверяет, что число увеличивается и уменьшается на основе сценария.

То, что я пытаюсь сделать, это создать скрипт, который будет искать на основе имени роли в атрибуте «data-rk», а затем собирать данные в соседнем столбце счетчиков разрешений.

Вот таблица:

<tbody id="rolesForm:rolesTable_data" class="ui-datatable-data ui-widget-content"> 
     <tr class="ui-widget-content ui-datatable-even" aria-selected="false" role="row"    
      data-rk="Role1" data-ri="0"> 
      <td role="gridcell">Role1</td> 
      <td role="gridcell"> 
      <span id="rolesForm:rolesTable:0:permissions">3</span> 
      </td> 
     </tr> 
     <tr class="ui-widget-content ui-datatable-odd ui-state-hover" aria- 
      selected="false" role="row" data-rk="Role2" data-ri="1"> 
      <td role="gridcell">Role2</td> 
      <td role="gridcell"> 
       <span id="rolesForm:rolesTable:1:permissions">38</span> 
      </td> 
     </tr> 

Любое предложение о том, как получить эти данные?

ответ

0

Следующий код поможет вам получить счетчик для конкретного атрибута data-rk, который вы хотите. В этом примере я ищу элемент tr, имеющий атрибут data-rk «Role1»

Сначала найдите элемент body таблицы по его атрибуту ID, а затем получите строку в столбце счетчиков разрешений из этого элемента следующим образом:

WebElement table = driver.findElementById("rolesForm:rolesTable_data"); 
    String pCount = table.findElement(By.xpath("/tr[@data-rk=\"Role1\"]/td[2]")).getText(); 
    // The returned object is a string. If you like, you could convert it to an integer 
    int count = Integer.parseInt(pCount); 

Обратите внимание, что этот код возвращает только первый элемент tr, который удовлетворяет условию. Если в вашей таблице будет несколько элементов tr, которые удовлетворяют этому условию, вам нужно будет создать список элементов tr, а затем перебрать их, чтобы получить счет. Вы можете получить список следующим образом:

WebElement table = driver.findElementById("rolesForm:rolesTable_data"); 
    List<WebElement> rows = table.findElements(By.xpath("/tr[@data-rk=\"Role1\"]); 
    // Iterate over rows to get each count 
    for (WebElement row : rows) { 
     String pCount = row.findElement(By.xpath("/td[2]")).getText(); 
     // Do whatever you want with pCount 
    } 
+0

Спасибо за быстрый ответ ... Тем не менее, я получаю сообщение об ошибке, что вы не можете преобразовать элемент Webelement в строку. Любые предлагаемые обновления? – zerotres

+0

Можете ли вы сказать мне, какая строка дает эту ошибку? Метод getText() возвращает строку, и я использую ее в единственном месте, где я создал строку. Я не конвертирую WebElement в строку в другом месте. – ucsunil

+0

Это ошибки в файле table.findElement (By.xpath ("/ tr [@ data-rk = \" Role1 \ "]/td [2]/span)). GetText(); Состояние сообщения об ошибке: Тип несоответствия: невозможно конвертировать из WebElement в String – zerotres

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