2016-10-25 31 views
1

使用打字稿量角器(硒)我可以叫browser.driver.getCapabilities()得到一個對象,它看起來是這樣的:關閉JavaScript的webdriver.Capabilities成字符串

Capabilities { 
    'acceptSslCerts' => true, 
    'applicationCacheEnabled' => false, 
    'browserConnectionEnabled' => false, 
    'browserName' => 'chrome', 
    'chrome' => { chromedriverVersion: '2.24.417431 (9aea000394714d2fbb20850021f6204f2256b9cf)', 
    userDataDir: 'C:\\Users\\***\\AppData\\Local\\Temp\\scoped_dir12788_29679' }, 
    'cssSelectorsEnabled' => true, 
    'databaseEnabled' => false, 
    'handlesAlerts' => true, 
    'hasTouchScreen' => false, 
    'javascriptEnabled' => true, 
    'locationContextEnabled' => true, 
    'mobileEmulationEnabled' => false, 
    'nativeEvents' => true, 
    'networkConnectionEnabled' => false, 
    'pageLoadStrategy' => 'normal', 
    'platform' => 'Windows NT', 
    'rotatable' => false, 
    'takesHeapSnapshot' => true, 
    'takesScreenshot' => true, 
    'version' => '54.0.2840.71', 
    'webStorageEnabled' => true } 

那它是什麼時候通過的console.log飼料等。 但是我怎樣才能在我的代碼中得到這個字符串表示?

caps.toJSON()什麼也沒有返回。 JSON.stringify(caps),也沒什麼。 for(let foo in caps)也不會產生任何東西。該對象看起來像某種地圖。我想將這個對象保存到一個文件中,console.log做了什麼特別的魔術,我該怎麼做?

如果有人知道這是什麼樣的對象,這也是有幫助的。我認爲它可能是ES6地圖,但與Converting ES6 Maps to and from JSON中的示例不同,它不是迭代器。

回答

3

方法getCapabilities返回一個ES6 MAP對象。似乎不可能直接序列化這個對象。所以,你最好的機會可能是序列化的條目:

browser.driver.getCapabilities().then(caps => { 
    var entries = Array.from(caps.entries()); 
    console.log(JSON.stringify(entries)); 
}); 

或者將條目轉換爲Object,然後序列化:

browser.driver.getCapabilities().then(caps => { 
    var obj = Array.from(caps.entries()).reduce((o, v) => (o[v[0]] = v[1], o), {}); 
    console.log(JSON.stringify(obj)); 
}); 
+0

感謝,似乎沒有成爲一個'條目()'在這個對象上? –

+0

它可以像我預期的那樣工作([email protected])。這是純JS,所以它可能是TypeScript編譯器的問題。 –

+0

謝謝,是的,對不起,我確實檢查它是否是一個類型問題,它是。如果不打算擴展定義,這個工作'( caps).entries())''。 –