如何在具有两个不同元素的条件语句中使用Assert

时间:2018-01-16 05:38:58

标签: c# selenium-webdriver nunit-3.0

我是使用Selenium和C#的新手,所以对大多数人来说这可能太容易了。此外,我在这个论坛上进行了搜索并且无法得到满意的答复,因此将继续问我想要解决的问题。

我想在两个不同的元素之间使用断言来检查值。如果第一个元素找到它,我想退出循环并传递测试,否则第二个元素;如果两者都没有,则测试失败。

p0是我在测试中传递的字符串,我想在 tranName accName

中检查字符串是否存在

transName 是int, accName 是字符串。但我将两者分配给同一个var。

Assert.That(transName.Text.Equals(p0));
Assert.That(accName.Text.Equals(p0));

请你建议,如何最好地解决这个问题。

谢谢.. !!

3 个答案:

答案 0 :(得分:0)

transName = driver.FindElement(By.xxxx);

if(transName.Displayed) {
   Assert.That(transName.Text.Equals(p0));
}
else {
   accName= driver.FindElement(By.xxxx);
   if(accName.Displayed) {
     Assert.That(accName.Text.Equals(p0));
   }
   else {
     Assert.That(True.Equals(False))
   }
}

答案 1 :(得分:0)

你不需要做所有这些条件。使用LINQ,NUnit和自定义CSS选择器定位器,这是一种更简单/更简单的方法。

List<string> text = Driver.FindElements(By.CssSelector("#XXX, #YYY")).Where(e => e.Displayed).Select(e => e.Text).ToList();
CollectionAssert.Contains(text, p0);

基本上我们将两个定位符合并为一个#XXX表示ID为XXX,逗号为OR运算符。 Selenium找到与这两个定位器匹配的所有元素,然后将这些元素过滤到可见的那些元素。然后它获取每个可见元素的.Text并将它们返回为List。第二行是NUnit,您可以在string中声明List<string>

答案 2 :(得分:-1)

int n;
bool searchWithNumber = int.TryParse(p0, out n);

var transName = driver.FindElement(By.Id("XXX"));
if (transName.Displayed && !searchWithNumber)
{
  Assert.That(tarnsName.Text.Contains(p0));
}
else if (searchWithNumber)
{
var accName = driver.FindElement(By.Id("YYY"));
if (accName.Displayed)
{
 Assert.That(accName.Text.Contains(p0));
}
else
{
  Assert.That(true.Equals(false));
   }
 }

所以我上面所做的是。我首先解析字符串p0 以提取数字(如果有),然后我将其分配给bool。然后在循环中我首先检查tranName是否有任何数字然后跳转到else条件,如果它有文本然后执行第一个条件。