繁体   English   中英

Selenium C#等待页面加载-UnexpectedJavaScriptError

[英]Selenium C# waiting for page to load - UnexpectedJavaScriptError

我正在使用selenium,IEDriver和C#,我想等待页面加载。 我有以下代码:

/// <summary>
/// Ceka dokud neni stranka nastena
/// </summary>
public static void WaitForPageToLoad()
{
  try
  {
    Thread.Sleep(500);
    Log.Trace("Browser.WaitForPageToLoad() - Ceka dokud neni stranka nactena ...");
    new WebDriverWait(Browser.Driver, new TimeSpan(0, 0, 360)).Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").Equals("complete"));
    Thread.Sleep(1000);
  }
  catch (Exception ex)
  {
    Log.Error(ex);
    throw;
  }
}

但这会导致崩溃:

    2018-01-04 15:39:27.2266 - ERROR: System.InvalidOperationException: JavaScript error (UnexpectedJavaScriptError)
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScriptCommand(String script, String commandName, Object[] args)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScript(String script, Object[] args)
   at BaseFramework.Browser.<>c.<WaitForPageToLoad>b__10_0(IWebDriver d) in C:\TFS\PRIVPMT\Selenium\BaseFramework\Browser.cs:line 97
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at BaseFramework.Browser.WaitForPageToLoad() in C:\TFS\PRIVPMT\Selenium\BaseFramework\Browser.cs:line 97
EXCEPTION: System.InvalidOperationException: JavaScript error (UnexpectedJavaScriptError)
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScriptCommand(String script, String commandName, Object[] args)
   at OpenQA.Selenium.Remote.RemoteWebDriver.ExecuteScript(String script, Object[] args)
   at BaseFramework.Browser.<>c.<WaitForPageToLoad>b__10_0(IWebDriver d) in C:\TFS\PRIVPMT\Selenium\BaseFramework\Browser.cs:line 97
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at BaseFramework.Browser.WaitForPageToLoad() in C:\TFS\PRIVPMT\Selenium\BaseFramework\Browser.cs:line 103
   at Gamma.Tests.GammaICRM.AT82688_ICRM_SMOKE() in C:\TFS\PRIVPMT\Selenium\Gamma.UI.Tests\Gamma.Tests\GammaICRM.cs:line 72
   at Gamma.Tests.GammaICRM.AT82688_ICRM_SMOKE_PerformTest() in C:\TFS\PRIVPMT\Selenium\Gamma.UI.Tests\Gamma.Tests\GammaICRM.cs:line 23

在大多数情况下都可以使用,但是有时会在此崩溃

下一个方法是这样的:

public static void LeftClick(this IWebElement element)
    {
      //pockame dokud nelze na element kliknout
      new WebDriverWait(Browser.Driver, new TimeSpan(0, 0, 120)).Until(ExpectedConditions.ElementToBeClickable(element));

      Actions actions = new Actions(Browser.Driver);
      //posuneme cursor na element
      actions.MoveToElement(element).Perform();
      //klikeneme na element
      actions.Click().Build().Perform();
    }

传递的webElement由XPath创建(webElement始终正确)

您可以尝试调用WebDriverWait类。 您可以使用它来等待元素显示在页面上(即,如果存在此对象,则页面加载)

public static IWebElement WaitUntilElementExists(By elementLocator, int timeout = 10)
{
    try
    {
        var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(timeout));
        return wait.Until(ExpectedConditions.ElementExists(elementLocator));
    }
    catch (NoSuchElementException)
    {
        Console.WriteLine("Element with locator: '" + elementLocator + "' was not found in current context page.");
        throw;
    }
}

在这段代码中,该方法返回wait.until,直到element在存在于页面上的元素上存在条件。 只是让它尝试在页面加载时查找页面上应该存在的元素。 如果在一定时间内不存在,它将给出NoSuchElementException(因此超时)。 抓住并给出自己的输出

来源: 如何让webDriver等待页面加载(C#Selenium项目)

希望这对你有帮助

我遇到了同样的问题,问题是我在框架内。 执行此javascript之前切换回默认内容可解决该错误。

希望该问题对您仍然有效。

一言以蔽之,在调用WaitForPageToLoad()之前,我已经使用_driver.SwitchTo().DefaultContent();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM