我在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 实际结果-我收到断言失败的消息'消息:期望:真 但是是:错误'
答案 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.");
它用作失败的标签,并将帮助您确定哪个断言实际失败。