2010-08-16 43 views
6

如何獲取硒中的請求/響應日誌?我有一個AJAX調用返回的登錄信息,每當我試着通過捕捉到它:如何在Selenium中獲取響應頭文件?

selenium.captureNetworkTraffic("json"); 

它只返回客戶端的項目(如圖片.pn),但不是實際的JSON響應我很感興趣in。

+0

任何人都可以幫助我,我認爲硒應該顯然有內部點擊和響應它?沒有人試過這個? – sasikumar 2010-08-18 10:45:30

回答

8

不幸的是,它看起來並不像你可以用硒自動完成,因爲這是against their design principles for selenium。我不同意它(因爲它支持獲取cookie信息 - 用戶實際經歷並通過他們的cookie解析?)。

他們的'schtick'是,硒可以幫助你自動化用戶做什麼;由於用戶不關心響應頭,爲什麼這個框架?對我來說,這是令人失望的,因爲我需要確保返回的內容類型是我認爲應該的內容(測試API)。看起來another Stack Overflow question已經得出類似的結論。

0

我發現了一個訣竅,如果你使用jquery你可以註冊一個全球聽衆:

首先,你需要在你的主函數來聲明一個全局變量:

var globalVariableForSelenium = ""; 

在您的硒您註冊監聽器:

if (driver instanceof JavascriptExecutor) { 
       ((JavascriptExecutor) driver) 
       .executeScript("$(document).ajaxSuccess(function(event, xhr, settings) { globalVariableForSelenium = settings.headers });"); 
      } 

然後您執行操作

Finaly你得到的全局變量的值:)

if (driver instanceof JavascriptExecutor) { 
      Object res = ((JavascriptExecutor) driver) 
      .executeScript("return serializeGlobalvariable();"); 

} 

serializeGlobalvariable(是將序列化globalVariableForSelenium其中包含報頭的數組的函數。

PS:我的需要是接觸到Ajax響應,所以我設置的全局變量與xhr.responseJSON.mypath

1

我意識到這個問題是老得要命,但我已經開發出一種方法做這通過修改webdriver.xpi並創建driver.http_logger.variousLogMethods()來實現firefox + selenium。如果對此感興趣,請回復此帖,我可以將代碼發佈到github上。

+0

我很感興趣。請發佈github鏈接。 – 2016-03-09 05:41:17

+0

@ user2426679我也很感興趣,請問Github上如何執行此操作? – David542 2016-10-05 19:56:44

+0

@ David542 - 我終於開始上傳這個小項目。我之前做了這個,所以文檔很少。 https://bitbucket.org/stbrownlow/seleniumwithfirefoxhttplogging/src – user2426679 2017-05-13 06:18:18

1

您可以通過注入一個XMLHttpRequest,並等待結果做到這一點:

Object response = ((JavascriptExecutor) driver).executeAsyncScript(
     "var callback = arguments[arguments.length - 1];" + 
     "var xhr = new XMLHttpRequest();" + 
     "xhr.open('GET', '/resource/data.json', true);" + 
     "xhr.onreadystatechange = function() {" + 
     " if (xhr.readyState == 4) {" + 
     " callback(xhr.getResponseHeader());" + 
     " }" + 
     "};" + 
     "xhr.send();"); 
    JsonObject json = new JsonParser().parse((String) response); 
    assertEquals("cheese", json.get("food").getAsString()); 

您可以修改XHR回調得到你想要的東西。