Sou*_*ter 5 javascript c# selenium qunit phantomjs
在我的几个项目中,我使用MVC模式将代码(关注点)分成3层.Model和Control层都在C#上运行,所以我使用像MSTest或NUnit这样的测试框架来验证这些层的功能需求.对于View层,我使用QUnit来测试JavaScript文件.
但是,我无法将QUnit作为自动化测试执行,因为MSTest不直接支持测试网页.我需要在MSTest中运行它,就像下面的逻辑一样.
[TestMethod]
public void JavaScriptTest()
{
var result = QUnit.Test('~/QUnit/test1.htm');
Assert.IsTrue(result.Failed <= 0)
}
Run Code Online (Sandbox Code Playgroud)
解决方案必须在QUnit中使用回调函数(不是在循环检查中)以确保测试完成后立即执行测试方法.
对于跨浏览器测试,Selenium WebDriver是解决此问题的最佳选择,因为我们可以通过仅更改一行代码轻松地在浏览器之间切换.

2.将首选驱动程序下载到项目中,添加到项目中并将"复制到输出目录"设置为"如果更新则复制".对于此示例,我使用Chrome驱动程序在我的计算机上使用Google Chrome运行Selenium.
3.在测试方法中,在运行QUnit之前创建驱动程序并设置最大执行时间.
var browser = new ChromeDriver();
var navigator = browser.Navigate();
// Currently, max execution time is one minute.
browser.Manage().Timeouts()
.SetScriptTimeout(new TimeSpan(0, 1, 0));
Run Code Online (Sandbox Code Playgroud)
4.请确保您已将QUnit的自动启动设置为false.
QUnit.config.autostart = false;
Run Code Online (Sandbox Code Playgroud)
5.导航到QUnit页面.在这种情况下,我在解决方案文件夹中使用本地网页.
browser.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 1, 0));
navigator.GoToUrl(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"../../../QUnit example/qunit-demo.htm"));
Run Code Online (Sandbox Code Playgroud)
6.在浏览器对象中使用ExecuteAsyncScript方法注册QUnit.done函数的回调并手动启动QUnit测试.
var response = browser.ExecuteAsyncScript
(
"var callback = arguments[arguments.length - 1];" +
"QUnit.done(callback); QUnit.start();"
);
Run Code Online (Sandbox Code Playgroud)
7.当QUnit测试完成后,它将返回响应.我们需要将其转换为合适的类型并获得测试结果.
var testResult = response as Dictionary<string, object>;
if(testResult == null) throw new Exception("Unhandle error occur while running QUnit.");
Console.WriteLine("Test complete in " + (long)testResult["runtime"] + " ms.");
Console.WriteLine("---------------------------");
Console.WriteLine("total: " + (long)testResult["total"]);
Console.WriteLine("passed: " + (long)testResult["passed"]);
Console.WriteLine("failed: " + (long)testResult["failed"]);
Run Code Online (Sandbox Code Playgroud)
8.每次使用完成测试时都不要忘记关闭浏览器.
browser.Close();
Run Code Online (Sandbox Code Playgroud)
PS.我还为此答案提供了Visual Studio 2012解决方案(源代码).
更新1
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |