自动化 End-End 测试 Nightwatch.js 之踩雷笔记:iframe

<iframe>

<iframe> 是在 HTML 用来内嵌另外一个 HTML 网页的,例如 SurveyCake 就有这样的功能

https://ithelp.ithome.com.tw/upload/images/20211003/20120250ylRuByDO77.png

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

<<:  Day 20 | 万年范例-TodoList(3)

>>:  DAY 21 Big Data 5Vs – Variety(速度) Kinesis (1)

Python 列印

我们终於进到写程序的部分了,前几天我们都在教学基本的使用,今天就让我来教大家吧!我们就先开到程序档的...

不只懂 Vue 语法:Vue 3 如何使用 Proxy 实现响应式(Reactivity)?

问题回答 Vue 3 会为 data 建立一个 Proxy 物件,并在里面建立 getter 和 s...

从 JavaScript 角度学 Python(9) - 容器型别(上)

前言 BMI 作业做得还好吗?不知道你有没有完成,但是这边时间不等人,所以我们就接着聊聊下一个主题吧...

Log Agent - Fluent Bit Multiline Parsing

Fluent bit回顾 Log Agent - Fluent Bit 简介 Log Agent -...

Day29 切版笔记 -订单进度条

今天来练习切这个画面 运用到的观念 flexbox google fonts 字体& ico...