selenium中未处理的警报异常,c#

时间:2018-02-08 05:24:18

标签: c# selenium firefox

我是Selenium的新手,我正在尝试验证用户是否已成功登陆主页。这是片段:

LoginPage.GoTo();//Goes Well

LoginPage.LoginAs("UserName").WithPassword("Password").Login();//goes Well

Assert.IsTrue(HomePage.IsAt, "Failed to login");//Below is the implementation of HomePAge.IsAt
public static bool IsAt
{     
   get 
     {
     var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(5));
     wait.Until(x => x.SwitchTo().ActiveElement().GetAttribute("id") == "IDHere");//Here the exception is occuring.
     }
     var homePage = Driver().Instance.FindElement(By.Id("IDHere"));
//   return true or False;

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

当您的浏览器出现警报时,它会阻止您实际执行其他任何操作。

  

仅供参考,当我尝试运行我的应用程序时,会弹出一个窗口身份验证   在页面加载之后来。

嗯,是的。这是"未处理的提醒例外"中的警告部分。 未处理部分是因为您没有使用任何代码行来向您的程序显示如何处理警报。 Selenium进入登录页面。然后尝试运行此行x.SwitchTo().ActiveElement().GetAttribute("id") == "IDHere",但您的页面上有一个警告,阻止您执行任何操作。

你必须真正尝试处理它(关闭它或接受消息)并且那么做其他事情。

等待警报出现(因为它可能不会立即出现)可能被认为是一种好习惯,然后,在(例如)5秒之后,如果没有警报,则运行您的代码。

请尝试以下代码,看看它是否可以解决您的问题:

public static boid WaitForAlert(bool accept)
{
    //Initialize your wait.
    WebDriverWait wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(5));
    //Wait for alert
    try
    {
        wait.Until(ExpectedConditions.AlertIsPresent());    
        if (accept)
        {
            Driver().Instance.SwitchTo().Alert().Accept();
        }
        else
        {
            Driver().Instance.SwitchTo().Alert().Dismiss();
        }    
    }
    catch (WebDriverTimeoutException) { /*Alert did not appear, do nothing*/ }
}

然后做:

LoginPage.GoTo();
LoginPage.LoginAs("UserName").WithPassword("Password").Login();
LoginPage.WaitForAlert(true); //True to accept the alert
Assert.IsTrue(HomePage.IsAt, "Failed to login");