我在NUNit框架上使用Selenium和C#,我试图在条件语句中寻找一个元素(横幅是具体的)。我已经有了一段代码来点击那个横幅并继续我的测试流程。
现在,我遇到的情况是,如果该横幅不存在那么用户必须执行其他步骤来设置横幅并继续。
所以,我希望我的IF检查不存在执行该段代码的条件,否则将跳过它。
var banner = FindElement(By.Id("bannerId"));
IF ( checking if above element not present)
{ execute set of steps to set the banner }
ELSE
{
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
banner.Click();
Thread.Sleep(2000);
}
我希望我能够解释我的问题并感谢任何帮助。
答案 0 :(得分:0)
你可以使用try和catch,
try
{
var banner = FindElement(By.Id("bannerId"));
IF ( checking if above element not present)
{ execute set of steps to set the banner }
ELSE
{
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
banner.Click();
Thread.Sleep(2000);
}
}
catch(Exception ex)
{
//check what will be the return message from ex.Message
//and from here you could add a logic what would be your next step.
}
答案 1 :(得分:0)
试试这段代码:
public bool IsElementVisible(IWebElement element)
{
return element.Displayed && element.Enabled;
}
IF(IsElementVisible(banner) == false)
{ execute set of steps to set the banner }
答案 2 :(得分:0)
我已经验证了您的代码。我可以看到一些错误。请找到以下建议:
代码行:
var banner = FindElement(By.Id(“bannerId”)); 会抛出“ NoSuchElementException ”和 if 语句下一行不会被执行。因此,最简单的选择是在找到元素的地方使用try和catch,并跳过 if 块。
您的代码段可以是:
try
{
var banner = FindElement(By.Id("bannerId"));
WebDriverWait wait2 = new WebDriverWait(driver,
TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
banner.Click();
Thread.Sleep(2000);
}
catch (NoSuchElementException ex)
{
//Give the appropriate message
}
第二段代码:
IList<IWebElement> banner = driver.FindElements(By.Id("bannerId"));
IF ( list size is zero)
{ execute set of steps to set the banner }
ELSE
{
WebDriverWait wait2 = new WebDriverWait(driver,
TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
//Click on the first element of the list
}
答案 3 :(得分:0)
使用FindElements
代替,它会阻止异常,您可以检查返回集合的大小以检查横幅是否存在
IList<IWebElement> elements = driver.FindElements(By.Id("bannerId")).ToList();
if(elements.Count == 0)
{
do something
}
else
{
//do something with the banner at elements[0]
wait2.Until(ExpectedConditions.ElementToBeClickable(elements[0])).Click();
}