<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');
}