有没有办法断言部分文本匹配?

时间:2019-10-24 20:51:33

标签: c# selenium selenium-webdriver

我在C#中使用Selenium OpenQA,并试图编写一个将比较两个字符串的断言,如果第一个字符串中的某些文本与第二个字符串中的部分文本匹配,则断言True。

string ActualValue = driver.FindElement(By.CssSelector("div.Toastify__toast.Toastify__toast--error")).Text;

Assert.IsTrue(ActualValue.Contains("There was an error validating your API key. Please contact Support and provide us with your public facing IP address:"));

我的'ActualValue'字符串正在提取此文本字符串,我需要将其与上面的字符串匹配(减去IP地址): “验证您的API密钥时出错。请与支持部门联系,并向我们提供您的公用IP地址:22.12.23.14”

该测试无法评估为True。

string ActualValue = driver.FindElement(By.CssSelector("div.Toastify__toast.Toastify__toast--error")).Text;

Assert.IsTrue(ActualValue.Contains("There was an error validating your API key. Please contact Support and provide us with your public facing IP address:"));

预期结果-由于第一个字符串包含在第二个字符串中,因此我希望assert.is true == true 实际结果-我收到断言失败的消息'消息:期望:真   但是是:错误'

2 个答案:

答案 0 :(得分:1)

此代码可以正常工作:

硒“ default.html”的目标html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <div id="item">There was an error validating your API key. Please contact Support and provide us with your public facing IP address: 102.2.10.11</div>
</body>
</html>

var driver = new ChromeDriver();
driver.Url = "file:///C:/Users/Espen/source/repos/Test/default.html"; // path to website under test
var str = driver.FindElement(By.CssSelector("div#item")).Text;
Assert.IsTrue(str.Contains("There was an error validating your API key. Please contact Support and provide us with your public facing IP address:"));

我认为您的文字在测试的两边都有错别字,或者您的选择器碰到一个或多个目标。在定位特定元素时,我会考虑使用id来选择而不是类选择器。

答案 1 :(得分:0)

这是一个很好的学习机会,可以编写更好的断言,这将有助于调试此问题和其他问题。与其编写评估结果为true / false的断言,不如编写一个可以为您提供更多信息的断言。例如,当您的断言失败时,您会收到消息

Expected: true
But was:  false

不是很有帮助,对吧?而是像使用StringAssert.Contains()

string expected = "There was an error validating your API key. Please contact Support and provide us with your public facing IP address:";
string actual = driver.FindElement(By.CssSelector("div#item")).Text;
StringAssert.Contains(expected, actual, "Verify error message.");

现在,当断言失败时,您将获得以下信息。

"Verify error message."
    Expected: String containing "There was an error validating your API key. Please contact Support and provide us with your public facing IP address:"
    But was: "There was an error validating your API key. Please contact Support and provide us with your public facing IP address:22.12.23.14"

现在,如果您的字符串不同,则可以将两者进行比较,然后查看问题出在哪里。如果您已经比较了实际字符串和预期字符串,但没有发现任何区别,则可能需要将它们视为ASCII值以查找不可打印的字符。

也...总是,总是,总是写断言。它是断言中预期和实际值之后的第三个字符串,例如

StringAssert.Contains(expected, actual, "Verify error message.");

它用作失败的标签,并将帮助您确定哪个断言实际失败。