Добрый день) появилась задача проверить, что на страницу подгружаются все ресурсы (те фактически проверить содержимое вкладки Network в консоли Chrome) Подскажите плиз, можно ли это автоматизировать с помощью Webdriver?
Вы можете дождаться пока завершаться все ajax запросы. Но если у вас есть запросы, которые выполняются переодически, рискуете ждать до таймаута
Юрий, тут BMP в помощь, сначала записать некоторый эталон количества всех запросов и ответов, а потом в самом тесте сравнивать этот эталон с тем что есть в данный момент.
тот же BrowserMob разве не подойдет ?
Можно попробовать подождать через javaScriptExecutor, пока “return document.readyState” не вернет complete
Вопрос стоит, что все ресурсы действительно ли подгрузились.
А какой ответ вернет readyState, если к примеру доступ к одному из css отсутствует и он не подзагрузился?
пример вот такой: есть некий ресурс example.com, и при загрузке подтягивается example.com/config.js и example.com/static/styles.css - иногда конфиг банально не загружается и прилоджение естесвенно падает. вот и хотелось бы автоматизировать проверку загрузки этих и заодно всех остальных ресурсов (еще пару js-ок, плюс шрифты, картинки jpg)
Думаю, копать сюда:
Чтобы получить информацию о каждом ресурсе с таймингом загрузки, может поможет код на JS:
performance.getEntriesByType("resource").forEach(function(resource) {
console.log(resource.name); console.log(resource.duration)
});
Можно получить информацию о каждом ресурсе с таймингом загрузки. Собственно - отличное решение.
для таких случаев, у меня для каждой страницы (заданный в base page от которой наследуются все остальные) есть метод аля IsOpened() который проверяет доступность элемента уникального для каждой страницы
выглядит примерно так:
типичная страница
public class CreateAdministratorAccountPage : AbstractPage
{
//some code
public CreateAdministratorAccountPage()
{
SetPageLocator(new Label(“Create Administrator Account”, “//div[@class=‘authorization’]”));
}
}
и
public abstract class AbstractPage
{
//some code
public void SetPageLocator(Label locator) { PageLocator = locator; }
public bool IsOpened(bool withoutTimeout = false) { if (PageLocator != null) { Log.Write(String.Format("Проверка открытия страницы. Locator: {0} Locator XPath: {1}", PageLocator.GetName(), PageLocator.GetXPath()), false, MessageType.Debug); return PageLocator.IsPresent(withoutTimeout); } else Log.Write("Page locator is null", false, MessageType.Warning); return true; }
}
и тест/DSL выглядит примерно так:
var createAccountPage = Navigate<CreateAdministratorAccountPage>(url); Assert.AreEqual(true, createAccountPage.IsOpened(), "Не удалось открыть страницу создания учетной записи администратора");
var welcomePage = createAccountPage. FillAdministratorAccountForm(login, "testagent@example.com", password). Create(); Assert.AreEqual(true, welcomePage.IsOpened(), "Не удалось открыть страницу продукта после создания учетной записи администратора");
и в случае если какая либо страница, форма и т.д. не открылась, либо открылась с адскими ошибками из за которых не удалось отрисовать элементы и т.п. - в ассерте будет четко сказано: “Не удалось открыть страницу Авторизации/Профиля/etc”
зы, может и костыльно, но подобный механизм меня устраивает не первый год
Друзья, читайте лучше что просят сделать. Еще раз - подсчитать всё что грузится, сохранить этот результат и использовать его потом в тесте. Как подсчитать - использовать - bmp. Либо как mes написал использовать js.
не разу не сталкивался с bmp, но спасибо, буду копать)