codeceptjs / codeceptjs/CodeceptJS
unable to enter iframe via switchTo(iframeID or iframeName) in edge and mobile chrome browser
- 主要语言
- JavaScript
- 星标
- 4.2k
- 派生
- 757
- 平均合并
- 2 天 9 小时
- 30 天内合并 PR
- 16
描述
#### What are you trying to achieve?
enter iframe using I.switchTo(#iframe) with Microsoft Edge browser or Chrome on Android
#### What do you get instead?
> Provide console output if related. Use `--verbose` mode for more details.
```bash
# error when executed in Edge browser
# also frame was found by I.waitForElement() in previous step:
The specified frame was not found in the current frame or window.
no such frame: The specified frame was not found in the current frame or window.
at getErrorFromResponseBody (/Users/wolf/WebstormProjects/newCodeceptJS/node_modules/webdriver/build/utils.js:215:10)
at Request._callback (/Users/wolf/WebstormProjects/newCodeceptJS/node_modules/webdriver/build/request.js:103:64)
at Request.self.callback (/Users/wolf/WebstormProjects/newCodeceptJS/node_modules/request/request.js:185:22)
at Request.emit (events.js:198:13)
at Request.EventEmitter.emit (domain.js:448:20)
at Request. (/Users/wolf/WebstormProjects/newCodeceptJS/node_modules/request/request.js:1161:10)
at Request.emit (events.js:198:13)
at Request.EventEmitter.emit (domain.js:448:20)
at IncomingMessage. (/Users/wolf/WebstormProjects/newCodeceptJS/node_modules/request/request.js:1083:12)
at Object.onceWrapper (events.js:286:20)
Scenario Steps:
- I.switchTo({"frame":"#ds24_heidelpay_cc_iframe"}) at Test.Scenario (ClassicOrderform_test.js:247:7)
- I.waitForElement({"frame":"#ds24_heidelpay_cc_iframe"}) at Test.Scenario (ClassicOrderform_test.js:246:7)
# -------------
# error when executed in Mobile Chrome on Android phone
# also frame was found by I.waitForElement() in previous step:
Error: invalid argument: missing 'ELEMENT'
(Session info: chrome=74.0.3729.136)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Linux 3.19.8-100.fc20.x86_64 x86_64)
at getErrorFromResponseBody (node_modules/webdriver/build/utils.js:215:10)
at Request._callback (node_modules/webdriver/build/request.js:103:64)
at Request.self.callback (node_modules/request/request.js:185:22)
at Request.EventEmitter.emit (domain.js:448:20)
at Request. (node_modules/request/request.js:1161:10)
at Request.EventEmitter.emit (domain.js:448:20)
at IncomingMessage. (node_modules/request/request.js:1083:12)
Scenario Steps:
- I.switchTo({"frame":"#ds24_heidelpay_cc_iframe"}) at Test.Scenario (ClassicOrderform_test.js:247:7)
- I.waitForElement({"frame":"#ds24_heidelpay_cc_iframe"}) at Test.Scenario (ClassicOrderform_test.js:246:7)
```
> identified workaround for both browsers
```js
// Step to fail:
I.switchTo('#iframeID');
// workaround for Edge and Chrome on Android browser via helper class:
await this.helpers["WebDriver"].browser.switchToFrame('iframeID'); //without #
```
### Details
* CodeceptJS version: 2.3.0 and before
* WebDriverIO: 5.10.9
*[Appium] Creating new AndroidDriver (v1.24.1)
贡献指南
调研方向
从 I.switchTo 背后的 WebDriver helper 开始,将其与 browser.switchToFrame('iframeID') 进行比较,并使用 ClassicOrderform_test.js 中失败的步骤进行复现。验证 frame 选择在 Edge 和 Android Chrome 中正常工作,并且不再需要现有的 workaround。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript
- 领域
- testing-qa
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100