Как ускорить объект страницы 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)
// использует ячейку, но могут использоваться и другие элементы
В вашем случае вы также можете установить высокий уровень ожидания элемента по умолчанию, а затем вернуться после того, как ваша логика подтвердит, что элемент завершен.
Один из сценариев, в котором вам может потребоваться немного дополнительная логика, - это когда данные уже присутствуют в таблице перед выполнением действия загрузки. Я предположил бы, что у приложения есть загрузчик страниц или элемент наложения в течение того времени, которое должно быть проверено.