Время ожидания Selenium C# ITakesScreenshot при попытке сделать снимок экрана в блоке catch - PullRequest
1 голос
/ 12 февраля 2020

У меня возникла проблема при попытке сделать снимок экрана при сбое теста. Ошибка тайм-аута при попытке сделать снимок экрана при сбое. Он работает нормально в блоке try, но по тайм-ауту в блоке catch. Любая помощь будет признательна.

Ниже приведен метод создания снимка экрана:

 public class Logging
        {
           public static void ErrorScreenshot()
            {
                //Take the screenshot
                Screenshot ssh = ((ITakesScreenshot)Driver.BrowserInstance).GetScreenshot();
                //Save the screenshot
                 ssh.SaveAsFile("C:/Users/", ScreenshotImageFormat.Png);
             } 
          }

Это мой метод проверки

    public static bool FindElement
    {
      get
      {
          try
          {
             var element = Driver.BrowserInstance.FindElement(By.XPath("  "));
             if (element != null)
             {
               return true;
             }
          }
          catch (Exception ex)
          {
             Logging.ErrorScreenshot();
             Logging.Error("Not able to find element" + ex.ToString());
          }
          return false;
     }

  }

, когда он не может найти элемент, который идет поймать block и там метод Logging.ErrorScreenshot генерирует исключение по тайм-ауту.

Error details:
OpenQA.Selenium.WebDriverException
  HResult=0x80131500
  Message=The HTTP request to the remote WebDriver server for URL http://localhost:55418/session/f3dbde1645dd91e453c5823d72199ea9/screenshot timed out after 60 seconds.
  Source=WebDriver
  StackTrace:
   at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.GetScreenshot()
   at AvbLinqAutoFramework.Logging.ErrorScreenshot() in C:\Users\Logging.cs:line 66
   at DashboardPage.get_Verifylogin() in C:\Users\DasboardPage.cs:line 65
   at Tests() in C:\Users\SmokeTests\Tests.cs:line 33

Inner Exception 1:
WebException: The operation has timed out

1 Ответ

0 голосов
/ 12 февраля 2020

Исправлена ​​эта проблема с использованием другого селектора (CssSelector) и WebDrverWait. Первоначальным исключением было истечение времени ожидания, когда не удалось найти элемент с использованием XPath.

public static bool FindElement
        {
            get
            {
                try
                {
       WebDriverWait wait = new WebDriverWait(Driver.BrowserInstance, TimeSpan.FromSeconds(10));
var inputspcmodel = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.CssSelector($"div[id ='modelSearch-container'] div[class='k-widget k-multiselect k-multiselect-clearable'] div input")));
inputspcmodel.Click();
return true;
}
catch (Exception ex)
                {
                    Logging.Error("Not able to find element " + ex.ToString());
                    Logging.ErrorScreenshot();
                }
                return false;
            }

        }
...