【问题标题】:How to make waitForWebPageToLoad to work in coded ui test?如何让 waitForWebPageToLoad 在编码的 ui 测试中工作?
【发布时间】:2017-06-08 11:50:21
【问题描述】:

首先,我是编码 ui 测试的初学者,我的代码技能很差,但我正在努力学习。

现在我正在 Visual Studio 中手动编写一些测试用例 (c#)(记录选项对我来说还不够),但我无法让 waitForWebPageToLoad 工作。

例如下面,我单击一个链接,输入一些文本并单击一个按钮。之后,我希望代码在继续之前等待网页加载。我现在所做的是Thread.Sleep,但这不是一个好的解决方案......

ClickLink(Repo.Link(Browser));
EnterText(Repo.Field(Browser), "12345789");
ClickButton(Repo.LeftButton(Browser));
Thread.Sleep(5000);  //<-------- This must be replaced... :)

如何让waitForWebPageToLoad 函数工作? 我有这些方法,但我不明白如何使它们起作用,有人想帮我理解吗?

void ClickButton(HtmlInputButton obj) {
    waitForWebPageToLoad(obj, 10);
    TestContext.WriteLine("Clicking button: " + obj.Name);
    Mouse.Click(obj);
}

并且:

void waitForWebPageToLoad(UITestControl parent, int waitTime) {
    waitTime = int.Parse(waitTime.ToString() + "000"); //waitTimeExtension.ToString());
    Playback.PlaybackSettings.SearchTimeout = waitTime;
    parent.WaitForControlExist(waitTime);
    parent.WaitForControlReady(waitTime);
}

【问题讨论】:

  • 你从哪里得到waitTime = int.Parse(waitTime.ToString() + "000");waitTime *= 1000; 有什么问题?
  • 一位作为开发人员的同事帮助了我,但他现在不在这个项目中,所以我想尽我所能

标签: c# coded-ui-tests


【解决方案1】:

waitforcontrol 有点方法是在控件类型上调用的。并且控件存在是正确的,但这并不意味着控件已准备好(它可能正在加载)

一般的做法是在super parent上调用waitforcontrolready方法。 (说浏览器)。我已将您的方法修改如下,

 public void WaitForPageToLoad(BrowserWindow browser, int WaitTimeOut)
    {
        // Waiting on all threads enable to wait for any background process to complete
        Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
        // Wait 
        browser.WaitForControlReady(WaitTimeOut * 1000);
        // Revert the playback settings (As waiting on all threads may sometime have a toll on execution speed 
        Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.UIThreadOnly;
    }

然后只需调用该方法等待,无论您在哪里进行页面加载。请记住以秒为单位传递浏览器和超时作为参数。有点像,

    ClickButton(Repo.LeftButton(Browser));
    WaitForPageLoad(Browser, 120);

希望对您有所帮助!

【讨论】:

  • 非常感谢您的帮助 Prageeth!我可能会在本周晚些时候对此进行测试,然后向您报告它是如何进行的:)
  • 您好,Prageeth Saravann。我现在尝试在我的测试用例中实现并调用您的方法,但它似乎忽略了 WaitForPageLoad(Browser, 120);打电话,或者它可能不起作用?在您修改的方法中,我在“浏览器”中更改为大写 B。您有什么想法或更多技巧可以让这项工作发挥作用吗?
  • 如果你改变了参数..那么你也必须在方法内部改变它。 (它有 browser.WaitForControlReady(WaitTimeOut * 1000);) 而且,你调试过代码吗?
  • 是的,我现在尝试在 WaitForPageLoad(Browser, 120); 上使用断点进行调试;但我不确定要查找什么,该代码对您有用吗?
  • 确实如此.. 代码流是否等待一秒钟左右?还是只是过去了?到底发生了什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多