Кодированный пользовательский интерфейс проходит экран загрузки во всех браузерах
Я использую 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();
}