我是使用Selenium和C#的新手,所以对大多数人来说这可能太容易了。此外,我在这个论坛上进行了搜索并且无法得到满意的答复,因此将继续问我想要解决的问题。
我想在两个不同的元素之间使用断言来检查值。如果第一个元素找到它,我想退出循环并传递测试,否则第二个元素;如果两者都没有,则测试失败。
p0是我在测试中传递的字符串,我想在 tranName 或 accName
中检查字符串是否存在transName 是int, accName 是字符串。但我将两者分配给同一个var。
Assert.That(transName.Text.Equals(p0));
Assert.That(accName.Text.Equals(p0));
请你建议,如何最好地解决这个问题。
谢谢.. !!
答案 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条件,如果它有文本然后执行第一个条件。