<iframe>
<iframe>
是在 HTML 用來內嵌另外一個 HTML 網頁的,例如 SurveyCake 就有這樣的功能
<iframe id="surveycake" width="100%" height="600px" src="https://surveycake.com/s/?????"
style="border:#ddd 1px solid;" allowTransparency="true" frameborder="0"></iframe>
而在使用 Nightwatch 測試網站時,遇到 iframe 是不能直接讀取 iframe 裡面的文字的。
會出現像這樣的錯誤:
"element could not be located" (5544ms)
這是因為 Nigthwatch 或應該說 WebDrive 抓取的是 current browsing context
因此屬於 iframe 當中的文字是抓取不到的
frame()
Nightwatch 有提供 .frame()
這個 API 可以使用,參數可以帶 ID 或數字,從 0 開始
舉例而言:
browser.frame(0)
browser.frame('surveycake')
退出 frame 只要使用 .frame(null)
或 .frameParent()
即可。
如果 frame 是動態載入的,使用 frame ID 則不一定抓取得到。而 frame 的 number 也不是由上而下來決定 0, 1, 2, ... 的。
因此,使用前最好還是試一下正確的 frame number,而動態載入抓取不到的部分,則可以利用 .getAttribute()
取得 src 在新分頁進行檢查。
browser.getAttribute('section iframe', 'src', function(result) {
.verify.containsText('[aria-label="intro"]', 'intro');
}