Загрузка страницы не выдает ошибку, даже если страница не загружена и имеет «Ошибка: 500 Ошибка сервера» - PullRequest
0 голосов
/ 27 мая 2019

Ниже приведен код для проверки, загружена страница или нет, она возвращается без ошибок, даже если на странице есть «Ошибка: 500 Ошибка сервера, Ошибка инициализации приложения».Мы не можем отобразить запрошенную страницу. 'отображается.

Я не пробовал ничего, кроме WaitForPageLoad, обнаруженного в stackoverflow.

public static void WaitForPageLoad(IWebwebDriver webwebDriver, int WaitTime = 12)
{
    string pageStatus = string.Empty;
    OpenQA.Selenium.Support.UI.WebwebDriverWait wait = new OpenQA.Selenium.Support.UI.WebwebDriverWait(webDriver, TimeSpan.FromSeconds(WaitTime));
        wait.Until(w =>
        {
        try
        {
        pageStatus = ((IJavaScriptExecutor)webDriver).ExecuteScript(@"return document.readyState").ToString();
        }
        catch (NoSuchWindowException)
        {
        webDriver.SwitchTo().Window(webDriver.WindowHandles.Last());
        }
        return (pageStatus.Equals("complete", StringComparison.InvariantCultureIgnoreCase) || pageStatus.Equals("loaded", StringComparison.InvariantCultureIgnoreCase));
        });
}

Я ожидал, что он выдаст ошибку, когда на странице есть ошибки или она вообще не загружена.В некоторых случаях часть страницы не является t loaded but still returns page state as 'complete'. Kindly check and let me know if this can be handled. Am even okay to check out for third party APIs like fiddler if there отличным решением.

1 Ответ

0 голосов
/ 27 мая 2019

Прежде всего, нет document.readypageStatus, есть document.readyState, поэтому я бы рекомендовал пересмотреть логику завершения загрузки страницы.

Если ваше приложение построено с использованием технологии AJAX в дополнение к вашей функции (или вместо нее), вы можете воспользоваться функцией Явное ожидание , например:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(12));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("someid")));

Таким образом, Selenium будет ждать элемент с атрибутом id из someid в течение 12 секунд и продолжит работу, как только он будет найден.Если элемент не появится в течение 12 секунд, вы получите WebDriverTimeoutException

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...