Как проверить, что на веб-страницу подгрузились все ресурсы?


(Yuri Zverev) #1

Добрый день) появилась задача проверить, что на страницу подгружаются все ресурсы (те фактически проверить содержимое вкладки Network в консоли Chrome) Подскажите плиз, можно ли это автоматизировать с помощью Webdriver?


(Dzmitry Ihnatsyeu) #2

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


(Vasiliy Rakshin) #3

Юрий, тут BMP в помощь, сначала записать некоторый эталон количества всех запросов и ответов, а потом в самом тесте сравнивать этот эталон с тем что есть в данный момент.


(5am) #4

тот же BrowserMob разве не подойдет ?


(sidelnikovmike) #5

Можно попробовать подождать через javaScriptExecutor, пока "return document.readyState" не вернет complete


(Bolatbek) #6

Вопрос стоит, что все ресурсы действительно ли подгрузились.
А какой ответ вернет readyState, если к примеру доступ к одному из css отсутствует и он не подзагрузился?


(Yuri Zverev) #7

пример вот такой: есть некий ресурс example.com, и при загрузке подтягивается example.com/config.js и example.com/static/styles.css - иногда конфиг банально не загружается и прилоджение естесвенно падает. вот и хотелось бы автоматизировать проверку загрузки этих и заодно всех остальных ресурсов (еще пару js-ок, плюс шрифты, картинки jpg)


(Bolatbek) #8

Думаю, копать сюда:
https://learn.javascript.ru/onload-ondomcontentloaded


(Bolatbek) #9

Чтобы получить информацию о каждом ресурсе с таймингом загрузки, может поможет код на JS:

performance.getEntriesByType("resource").forEach(function(resource) {
    console.log(resource.name); console.log(resource.duration)
});

Можно получить информацию о каждом ресурсе с таймингом загрузки. Собственно - отличное решение.


(5am) #10

для таких случаев, у меня для каждой страницы (заданный в 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"

зы, может и костыльно, но подобный механизм меня устраивает не первый год :slight_smile:


(Vasiliy Rakshin) #11

Друзья, читайте лучше что просят сделать. Еще раз - подсчитать всё что грузится, сохранить этот результат и использовать его потом в тесте. Как подсчитать - использовать - bmp. Либо как mes написал использовать js.


(Yuri Zverev) #12

не разу не сталкивался с bmp, но спасибо, буду копать)