Кнопка остановки события WPF, Selenium

Как остановить событие кнопки, когда сработало исключение...? Я использовал блоки try try, если сработало исключение, оно попытается выполнить следующий код, я не хочу этого... Просьба проверять комментарии в коде.. Я неправильно использую блоки try try..?

вот мой код:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    try
    {
         driver.FindElement(By.CssSelector(".username")).SendKeys("abc");
         driver.FindElement(By.CssSelector(".password")).SendKeys("abcpassword");
         driver.FindElement(By.XPath("//a[2]/img")).Click();
    }
    catch(Exception ex)
    {
        driver.Quit();
        MessegeBox.Show("Log in failed");
        //stop button event here only if exception fired
    }

    try
    {
        new SelectElement(driver.FindElement(By.Id("CId"))).SelectByText("CVB");
        driver.FindElement(By.Name("ddd")).Click();
    }
    catch(Exception ex)
    {   
        driver.Quit();
        MessegeBox.Show("Log in failed");
        //stop button event here only if exception fired
    }

    Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
    Excel.Workbook xlWorkBook;
    Excel.Worksheet xlWorkSheet;
    xlApp.DisplayAlerts = false;
    object misValue = System.Reflection.Missing.Value;
}

2 ответа

catch только нарушает выполнение кода внутри try блок. Это не возвращается из метода. Типичный сценарий действительно только один try/catch блок в методе (так что catch будет также последним в вашем методе -> метод завершится):

public void SomeMethod()
{
    try
    {
        ...
    }
    catch(...)
    {
        ...
    }
    ... // code will continue to run here, if no code left method will ends
}

В вашем случае вы должны выйти из метода, чтобы избежать других try/catch бежать, значит использовать return ключевое слово как это:

public void SomeMethod()
{
    try
    {
        ...
    }
    catch(...)
    {
        ...
        return;
    }
    ... // this code will not run in case of exception in try block
}

Я хотел бы предложить вам реструктурировать свой код, как показано ниже. Еще лучше обрабатывать конкретные исключения, а не обрабатывать общее исключение.

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {
            driver.FindElement(By.CssSelector(".username")).SendKeys("abc");
            driver.FindElement(By.CssSelector(".password")).SendKeys("abcpassword");
            driver.FindElement(By.XPath("//a[2]/img")).Click();

            new SelectElement(driver.FindElement(By.Id("CId"))).SelectByText("CVB");
            driver.FindElement(By.Name("ddd")).Click();
        }
        catch (Exception ex)
        {
            driver.Quit();
            MessegeBox.Show("Log in failed");
            return;
        }

        Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        xlApp.DisplayAlerts = false;
        object misValue = System.Reflection.Missing.Value;
    }
Другие вопросы по тегам