Как ускорить объект страницы Ruby.visible? или существует? проверки

Я использую гем объектов Page Object Ruby для тестирования веб-страниц и столкнулся с некоторыми небольшими проблемами с производительностью. Мне нужно проверить, существуют ли элементы на текущей странице, но мой текущий метод использования.visible? Требует длительного времени ожидания, иногда в десятки секунд. или.exsits?. Эта проблема производительности возникает, когда рассматриваемый элемент на самом деле не существует на странице.

HTML-код довольно запутанный, поэтому трудно привести пример, но вот базовый формат таблицы, которую должен искать код:

<body>
  <div>
  <div>
  <div>
  ...
  <table>
    <tbody>
      <tr>
        <td>
          <a href = "#" onclick="return url_here"
        </td>
        <td class= "no wrap">Active<
        <td class= "no wrap">06/15/2016</td>
        <td class= "no wrap">06/15/2016</td>
      </tr>
      <tr>
      <tr>
     </tbody>
    <tfoot>...</tfoot>
  </table>
...

Я установил элемент так:

table(:attributes_tbody, :xpath => "//*[@id='Form:agrAttributesTable']/tbody")

Затем используйте этот код, чтобы проверить, присутствует ли эта таблица на странице:

if attributes_tbody_element.visible?
  attributes_tbody_element.each do |row|
    if row[1].text == to_title_case(attribute)
      p 'EXPECTED ATTRIBUTE EXISTS'
    end
  end
end

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

Любая помощь приветствуется!

2 ответа

Решение

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

См. Документы Selenium для получения дополнительной информации о явных и неявных ожиданиях.

Не уверен, если и как вы решили свою проблему, так что здесь идет...

Вы можете определить время ожидания страницы и элемента по умолчанию в Page-Object с помощью PageObject.default_page_wait и PageObject.default_element_wait, а затем использовать методы element_wait.

Здесь уже есть страница ожидания по умолчанию и отличное объяснение методов ожидания элемента.

Кроме того, вместо использования xpath "путь" Page-Object будет определять родительский, а затем дочерний элемент, как в ответе здесь.

Ваш стол будет что-то вроде:

table(:ur_tbl, :id =>'Form:agrAttributesTable')
ur_tbl.when_present(time_to_wait)
ur_tbl_element[0][1].when_present(time_to_wait) 

// использует ячейку, но могут использоваться и другие элементы

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

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

Другие вопросы по тегам