Есть ли способ заявить о частичном сопоставлении текста? - PullRequest
0 голосов
/ 24 октября 2019

Я использую Selenium OpenQA в C # и пытаюсь написать assert, который будет сравнивать две строки и утверждать 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.istrue == true Фактические результаты -Я получаю сообщение о том, что подтверждение не выполнено 'Сообщение: Ожидаемый: True Но было: False'

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Этот код отлично работает:

Целевой html для селена "default.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:"));

Я думаю, ваш текст содержит опечатку по обе стороны от теста, или ваш селектор поражает одну или несколько целей. Я бы посоветовал использовать идентификаторы для выбора вместо селекторов классов при нацеливании на определенные элементы.

0 голосов
/ 25 октября 2019

Это отличная возможность обучения для написания более качественных утверждений, которые помогут устранить эту и другие проблемы. Вместо того чтобы писать утверждение, которое оценивается как 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.");

Она служит меткой для ошибки и поможет вам определить, какое утверждение на самом деле не удалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...