【问题标题】:Selenium + FirefoxDriver access global javascript objectSelenium + FirefoxDriver 访问全局 javascript 对象
【发布时间】:2016-05-26 10:58:31
【问题描述】:

我想使用 Selenium 检查全局对象的值。但到目前为止,我无法使用 FirefoxDriver...

运行driver.ExecuteScript("return 1+2"); 之类的东西确实会按预期返回 3;运行 driver.ExecuteScript("return myObject"); 确实适用于 Chrome 驱动程序,但在 FirefoxDriver 中产生 null。

以下内容在 Chrome 中有效,但在 Firefox 中引发异常:

 //driver is either an instance of FirefoxDriver or ChromeDriver
 driver.Url = "https://www.google.com";
 driver.Navigate();
 //gbar is a global object at google.com
 var result = driver.ExecuteScript("return gbar");
 Assert.NotNull(result);

例外:

System.InvalidOperationException : ReferenceError: gbar is not defined (UnexpectedJavaScriptError)
StackTrace: 
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 ...

使用 Selenium.Webdriver 2.53.0 和 Firefox 开发者版 48.0a2,以及在 Win10、.Net 4.6.1 上运行的常规 Firefox 46.0.1。

【问题讨论】:

    标签: c# selenium selenium-firefoxdriver


    【解决方案1】:

    在您调用ExecuteScript 时,gbar 似乎尚未定义。我会尝试等待它:

    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15));
    var result = wait.Until((drv) => drv.ExecuteScript("return window.gbar || null;"));
    

    【讨论】:

    • 感谢您的想法(至少现在我知道这个 Selenium 功能),但没有运气。当我在探索 selenium 时,浏览器在谷歌主页上花了几分钟时间,并附加了调试器。还尝试通过窗口访问对象,但也没有运气......
    • 这可能与您的 Firefox 版本有关。您的示例在 Win8.1/Firefox 46 上运行良好。您至少可以在使用 Selenium 启动的浏览器的控制台中获取变量吗?
    • 好吧,刚刚检查了常规的 Firefox v.46.0.1,结果相同。该变量存在于打开的 FF 控制台中,但无法通过 Selenium 获取。例如发送警报('hi')也会在浏览器中显示警报框。
    【解决方案2】:

    在尝试运行 JQuery 代码时,我在 FirefoxDriver 上遇到了同样的问题。

    错误:

    ReferenceError: $ 未定义 (UnexpectedJavaScriptError) firefox 硒

    使用相同的代码在 ChromeDriver 上运行良好

    【讨论】:

      【解决方案3】:

      在尝试将自定义函数注入正在运行的网页进行测试时,我遇到了同样的问题。这些功能在 chrome 驱动程序中可见,但在 firefox 中不可见。

      解决方案是将这些函数注入窗口范围。然后你可以在没有“window”前缀的情况下引用它们。以下将起作用:

      driver.executeScript("window.mystuff = 'somestuff'")
      driver.executeScript("return mystuff")
      

      【讨论】:

        猜你喜欢
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-13
        • 2011-08-25
        • 1970-01-01
        • 2016-05-09
        • 1970-01-01
        相关资源
        最近更新 更多