如果元素不存在,则使用Selenium(C#)进行ELSE条件

时间:2018-05-30 03:29:45

标签: c# selenium selenium-webdriver nunit

我在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);
}

我希望我能够解释我的问题并感谢任何帮助。

4 个答案:

答案 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)

我已经验证了您的代码。我可以看到一些错误。请找到以下建议:

  1. 代码行:

    var banner = FindElement(By.Id(“bannerId”)); 会抛出“ NoSuchElementException ”和 if 语句下一行不会被执行。因此,最简单的选择是在找到元素的地方使用try和catch,并跳过 if 块。

  2. 您的代码段可以是:

     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
    }
    
    1. 如果您想要遵循代码中提到的方法,请尝试下面的代码段。您必须将元素存储在List中并检查列表大小。如果列表的大小不为零,那么您可以单击横幅,否则显示相应的消息。
    2. 第二段代码:

      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();
}