2015-11-27 85 views
0

我想驗證一個外部javascript函數在頁面上通過Selenium單擊項目時被調用。 (我們已經有茉莉花單元測試覆蓋這與間諜)。訪問selenium中的window.external函數WebDriver

這樣的想法是有一些像

WebDriver.ExecuteJavascript<string>("window.called = false"); 
WebDriver.ExecuteJavascript<string>("window.external.MyFunction = function(){ window.called = true; }"); 
var element = WebDriver.GetElement(By.ClassName("awesomeElement")); 
element.Click(); 

string value = WebDrider.ExecuteJavascript<string>("return window.called;"); 

這段代碼的問題是我收到的第一行異常。

這是例外:

Exception: System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Object.GetType() 
    at OpenQA.Selenium.Support.Extensions.WebDriverExtensions.ExecuteJavaScript[T](IWebDriver driver, String script, Object[] args) 

請注意,webdriver的不爲空,且方法拋出。我找不到任何文件表示訪問窗口函數/變量受到限制。任何想法可能是錯誤的?

+0

你有什麼異常?謝謝。 – alecxe

+0

是什麼例外? – fabersky

+0

添加了異常:異常:System.NullReferenceException:未將對象引用設置爲對象的實例。在System.Object.GetType()在OpenQA.Selenium.Support.Extensions.WebDriverExtensions.ExecuteJavaScript [T](IWebDriver驅動程序,字符串腳本,對象[] ARGS) –

回答

1

原來這是由於沒有初始化window.called和window.external。對於那些正在尋找類似下面的代碼片段的人來解決它。

IJavaScriptExecutor executor = WebDriver as IJavaScriptExecutor; 
executor.ExecuteScript("window.called='false';"); 
executor.ExecuteScript("window.external={};"); 
executor.ExecuteScript("window.external.MyFunction=function()..;"); 
相關問題