[Selenium With C# 基础教程] Lesson14-Assert

断言(Assert)就是检查点,用来判定测试是否通过的标志。在一个测试脚本中,如果没有断言,则该测试用例也失去了测试的意义。我们先来看看微软提供的单元测试框架中的Assert类,如下图所示:

14-1 Assert类.jpg

微软框架中提供的断言有很多个,我们常用的有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);

断言图片当前状态

在一些网页页面中,当某些事件发生后,才会触发另外一些事件,例如下图所示的,点击按钮进行显示和隐藏图片:

14-2 图片显示和隐藏_c2i.jpg

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类来写好更好的自动化测试用例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容