首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法来断言部分文本匹配?

是否有一种方法来断言部分文本匹配?
EN

Stack Overflow用户
提问于 2019-10-24 20:51:33
回答 2查看 3.7K关注 0票数 1

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

代码语言:javascript
运行
复制
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。

代码语言:javascript
运行
复制
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真==真结果-I得到断言失败的消息: expect : true,但为False:False

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-25 01:54:56

这是一个很好的学习机会,可以编写更好的断言来帮助调试这个问题和其他问题。不要编写一个计算结果为true/false的断言,而是编写一个会给您提供更多信息的断言。例如,当断言失败时,您将得到消息。

代码语言:javascript
运行
复制
Expected: true
But was:  false

不是很有帮助对吧?相反,请使用StringAssert.Contains(),如

代码语言:javascript
运行
复制
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.");

现在,当断言失败时,您将得到下面的信息。

代码语言:javascript
运行
复制
"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值来查找不可打印的字符。

还有..。总是,总是,总是写一个断言注释。它是断言中继预期和实际之后的第三个字符串。

代码语言:javascript
运行
复制
StringAssert.Contains(expected, actual, "Verify error message.");

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

票数 2
EN

Stack Overflow用户

发布于 2019-10-24 22:04:08

此代码运行良好:

selenium "default.html“的目标html

代码语言:javascript
运行
复制
<!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>

代码语言:javascript
运行
复制
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:"));

我在想,要么你的文本在测试的任何一边有一个错误,要么你的选择器击中一个或多个目标。在针对特定元素时,我会考虑使用ids来选择类选择器而不是类选择器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58548978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档