断言(Assert)就是检查点,用来判定测试是否通过的标志。在一个测试脚本中,如果没有断言,则该测试用例也失去了测试的意义。我们先来看看微软提供的单元测试框架中的Assert类,如下图所示:
微软框架中提供的断言有很多个,我们常用的有Assert.IsTrue()、Assert.IsFalse()、Assert.AreEqual()、Assert.AreNotEqual()等包含常规类型和泛型
在Selenium中常被用于断言的条件如下所示:
- 页面标题(等于或包含)
- 页面内容(包含或不包含某些内容)
- 页面源码(包含或不包含某些内容)
- 元素中输入的内容(等于或包含)
- 元素显示的内容(等于或包含)
- 元素的状态(选中、禁用、显示状态)
断言页面标题
driver.Url = "https://www.baidu.com";
driver.Manage().Window.Maximize();
Assert.AreEqual("百度一下,你就知道",driver.Title);
断言页面内容
driver.Url = "https://www.baidu.com";
driver.Manage().Window.Maximize();
string eleText=driver.FindElement(By.Id("setf")).Text;
Assert.IsTrue(eleText.Contains("把百度设为主页"));
断言页面源码
driver.Url = "https://www.baidu.com";
driver.Manage().Window.Maximize();
string expectText = "京公网安备11000002000001号";
Assert.IsTrue(driver.PageSource.Contains(expectText));
断言复选框状态
IWebElement checkEle=driver.FindElement(By.Id("isChecked"));
Assert.IsTrue(checkEle.Selected);
断言按钮状态
IWebElement btnEle=driver.FindElement(By.Id("btn"));
Assert.IsTrue(checkEle.Enabled);
断言文本内容
HTML源码如下:
<label id="label">测试Label内容</label>
断言代码:
string labelText=driver.FindElement(By.Id("label")).Text;
string expectText = "测试Label内容";
Assert.AreEqual<string>(expectText, labelText);
断言span文本内容
HTML源码如下:
<span id="span">测试Span内容</span>
从上面的HTML源码可以看到span其实跟Label是一样的,断言代码也会很相似,如下所示:
string spanText = driver.FindElement(By.Id("span")).Text;
string expectText = "测试Span内容";
Assert.AreEqual<string>(expectText, spanText);
断言div文本内容
HTML源码如下:
<div id="div1">
Test div
<div id="divChild1">divChild1</div>
<div id="divChild2">divChild2</div>
</div>
断言代码:
Assert.AreEqual<string>("Test div\r\ndivChild1\r\ndivChild2", driver.FindElement(By.Id("div1")).Text);
Assert.AreEqual<string>("divChild1", driver.FindElement(By.Id("divChild1")).Text);
Assert.IsTrue(driver.FindElement(By.Id("divChild2")).Text.Contains("divChil"));
断言表格文本内容
HTML源码如下:
<table id="testTable" cellpadding="1" border="1" width="50%">
<tr id="row1">
<td id="cell1">Cell-1-1</td>
<td id="cell2">Cell-1-2</td>
</tr>
<tr id="row2">
<td id="cell3">Cell-2-1</td>
<td id="cell4">Cell-2-2</td>
</tr>
</table>
断言代码:
IWebElement table= driver.FindElement(By.Id("testTable"));
string allTableText =table.Text;
string expectText="Cell-1-1 Cell-1-2\r\nCell-2-1 Cell-2-2";
Assert.AreEqual(expectText, allTableText);
string js = "return arguments[0].outerHTML;";
var htmlSource = ((IJavaScriptExecutor)driver).ExecuteScript(js, table).ToString();
string resultText="<td id=\"cell3\">Cell-2-1</td>";
Assert.IsTrue(htmlSource.Contains(resultText));
断言单元格内容
IWebElement cell = driver.FindElement(By.Id("cell1"));
string expectText = "Cell-1-1";
Assert.AreEqual<string>(expectText, cell.Text);
断言表格行内容
IWebElement row = driver.FindElement(By.Id("row2"));
string expectText = "Cell-2-1 Cell-2-2";
Assert.AreEqual<string>(expectText, row.Text);
断言图片当前状态
在一些网页页面中,当某些事件发生后,才会触发另外一些事件,例如下图所示的,点击按钮进行显示和隐藏图片:
HTML源码如下:
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="GB2312" />
<title>测试图片当前状态</title>
<script>
function ShowOrHideImg()
{
var target = document.getElementById('imgDiv');
if (target.style.display=='block') {
target.style.display = 'none';
}
else {
target.style.display = 'block';
}
}
</script>
</head>
<body>
<div id="btn" class="button">
<input type="button" id="button" value="显示/隐藏图片" onclick="ShowOrHideImg()" />
</div>
<div id="imgDiv"class="divName" style="display:none;">
![](img\Selenium.jpg)
</div>
</body>
</html>
断言代码如下:
driver.FindElement(By.Id("button")).Click();
IWebElement imgEle = driver.FindElement(By.Id("img"));
Assert.IsTrue(imgEle.Displayed);
driver.FindElement(By.Id("button")).Click();
Assert.IsFalse(imgEle.Displayed);
断言在日常测试过程是非常重要的一个环节,在测试过程中我们需要找到合适的断言点,以此来判断测试能否通过,所以需要我们结合自身项目和Assert类来写好更好的自动化测试用例。