2016-05-26 7 views
1

Я хочу проверить значение глобального объекта с помощью Selenium. Но до сих пор я не мог сделать это с помощью FirefoxDriver ...Selenium + FirefoxDriver доступ к глобальному объекту javascript

Запуск чего-то вроде driver.ExecuteScript("return 1+2"); действительно возвращает 3, как ожидалось; работающий driver.ExecuteScript("return myObject"); действительно работает с драйвером Chrome, но дает null в FirefoxDriver.

следующие работы в 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 Developer Edition 48.0a2 и регулярные Firefox 46.0.1 работает на Win10, .Net 4.6.1.

ответ

0

похоже, что gbar еще не обозначен во время вашего звонка ExecuteScript. Я бы хотел подождать:

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

Спасибо за идею (по крайней мере, теперь я знаю эту функцию Selenium), но не повезло. Когда я изучал селен, браузер провел минуты на главной странице google с прикрепленным отладчиком. Также попытался получить доступ к объекту через окно, но не повезло с этим либо ... –

+0

Возможно, это связано с вашей версией Firefox. Ваш пример отлично работает со мной на Win8.1/Firefox 46. Можете ли вы хотя бы получить переменную в консоли браузера, запущенной с помощью Selenium? –

+0

Ну, только что проверил обычный Firefox v.46.0.1 и тот же результат. Переменная присутствует в открытой консоли FF, но не может получить ее с Selenium. Например, отправка предупреждения («привет») показывает окно предупреждения в браузере. –

0

У меня такая же проблема на FirefoxDriver при попытке запустить код JQuery.

Ошибка:

ReferenceError: $ is not defined (UnexpectedJavaScriptError) firefox selenium

Run штрафа на ChromeDriver с тем же кодом