Кодированный пользовательский интерфейс проходит экран загрузки во всех браузерах

Я использую Microsoft Coded Ui в Visual Studio 2015, обновление 1.

Я создаю кодированные тесты пользовательского интерфейса для веб-сайта, который сталкивается с проблемой в Chrome и Firefox. Сайт находится на https://onboard.passage ways.com/. Существует div, который имеет эту информацию:

<div id="loadingOverlay" data-bind="fadeVisible: loading" style="display: none; width: 100%; height: 100%; position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; z-index: 9999; background: rgb(204, 204, 204);">

Chrome и Firefox отображают страницу так быстро, что они видят loadingOverlay, когда стиль "display: table", Этот оверлей загрузки есть практически на каждой части сайта.

Мой вопрос заключается в том, как сказать Chrome и Firefox подождать, пока loadingOverlay не отобразит ничего, чтобы он мог нажимать на элементы в фоновом режиме.

Я пробовал этот код, но он продолжает говорить, что коллекция в 1.

public static HtmlDiv GetOverlay(UITestControl parent, string id)
    {
        var div = new HtmlDiv(parent);
        div.SearchProperties.Add(HtmlDiv.PropertyNames.Id, id);

        GetOverlayProperty(div);
        return div;
    }

    private static UITestControlCollection GetOverlayProperty(HtmlDiv overlay)
    {
        overlay.SearchProperties.Add(HtmlControl.PropertyNames.ControlDefinition, "display: table",
            PropertyExpressionOperator.Contains);

        UITestControlCollection collection = overlay.FindMatchingControls();

        if (collection.Any())
        {
            GetOverlay(browser, "loadingOverlay");
        }

        return collection;
    }

Мой тест инициализировать

    [TestInitialize]
    public void ClassInitializer()
    {
        BrowserWindow.CurrentBrowser = ConfigurationManager.AppSettings.Get("Browser-Type");

        CodedUIUtils.browser = BrowserWindow.Launch(new Uri(ConfigurationManager.AppSettings.Get("Browser-Url")));

        CodedUIUtils.browser.CloseOnPlaybackCleanup = false;
        CodedUIUtils.browser.Maximized = false;
    }

Мой логин тест

    [TestMethod]
    public void LoginAndLogout()
    {
        CodedUIUtils.ClickButton(CodedUIUtils.browser, "PassagewaysLogin");
        CodedUIUtils.LoginGuest(CodedUIUtils.browser);
        CodedUIUtils.ClickLogon(CodedUIUtils.browser, "Logon");

        HtmlDiv overlay = CodedUIUtils.GetOverlay(CodedUIUtils.browser, "loadingOverlay");
        overlay.WaitForControlNotExist();

        CodedUIUtils.ClickLink(CodedUIUtils.browser, "Log Out");
        Playback.Wait(2000);
    }

Логин Утилиты

   public static class CodedUIUtils
   {
    public static BrowserWindow browser;

    public static void LoginGuest(BrowserWindow browser)
    {
        EnterText(browser, "Email", "onboardTestUserId+guest@gmail.com");
        EnterText(browser, "LoginPassword", "Testing2!");
    }

    public static void ClickButton(UITestControl parent, string id)
    {
        var button = new HtmlButton(parent);
        button.SearchProperties.Add(HtmlButton.PropertyNames.Id, id);

        Mouse.Click(button);
    }

    public static void EnterText(UITestControl parent, string id, string value)
    {
        var edit = new HtmlEdit(parent);
        edit.SearchProperties.Add(HtmlEdit.PropertyNames.Id, id);
        edit.Text = value;
    }

    public static void ClickLink(UITestControl parent, string innerText)
    {
        var link = new HtmlHyperlink(parent);
        link.SearchProperties.Add(HtmlHyperlink.PropertyNames.InnerText, innerText);
        link.WaitForControlReady();

        Mouse.Click(link);
    }

    public static void ClickLogon(UITestControl parent, string value)
    {
        var logonInput = new HtmlInputButton(parent);
        logonInput.SearchProperties.Add(HtmlInputButton.PropertyNames.ValueAttribute, value);

        Mouse.Click(logonInput);
    }
   }

1 ответ

Это общепринятая практика, когда что-то может иметь время загрузки / вводную анимацию или просто кодировать с помощью функций WaitForControlReady или WaitForControlExist.

Таким образом, если вы действительно не заботитесь о оверлее загрузки, тогда вы можете просто поместить функцию на первый объект, на который влияет оверлей, с которым вы действительно хотите взаимодействовать.

[TestMethod]
    public void Stackru()
        {
        BrowserWindow browser = BrowserWindow.Launch(new Uri("https://onboard.passageways.com/"));

        var _hyper = new HtmlButton(browser);
        _hyper.SearchProperties.Add("ID", "PassagewaysLogin");
        _hyper.WaitForControlReady();
        LoadingOverlay(browser);
        Mouse.Click(_hyper);

        var _email = new HtmlEdit(browser);

        _email.SearchProperties.Add("ID", "Email");
        _email.WaitForControlReady();
        LoadingOverlay(browser);
        Keyboard.SendKeys(_email, "testemail@email.com");
        Playback.Wait(10000);
        }

        public static void LoadingOverlay(BrowserWindow browser)
        {
        var _image = new HtmlDiv(browser);
        _image.SearchProperties.Add("ID", "loadingOverlay");
            _image.WaitForControlReady();
        }
Другие вопросы по тегам