Webdriverio: 无法在 MS Edge 上使用 browser.switchToFrame()

创建于 2019-04-24  ·  3评论  ·  资料来源: webdriverio/webdriverio

环境 :

  • WebdriverIO 版本: [“webdriverio”:“^5.7.15”]
  • 模式: [WDIO Testrunner/BROWSERSTACK]
  • 如果 WDIO Testrunner,运行同步/异步: [同步​​]
  • Node.js 版本: [v8.11.3]
  • NPM 版本: [5.6.0]
  • 浏览器名称和版本: [MS Edge v16、v17、v18]
  • 平台名称和版本: [macOS Mojave 10.14.4]
  • 使用的其他 wdio 包(如果适用):具有相同问题的示例项目托管在GitHub 上

包.json

"dependencies": {
    "browserstack-local": "^1.3.7",
    "config": "^1.28.1",
    "uuid": "^3.1.0",
    "webdriverio": "^5.7.15"
  },
  "devDependencies": {
    "config": "^1.28.1",
    "@wdio/cli": "^5.7.15",
    "@wdio/local-runner": "^5.7.15",
    "@wdio/mocha-framework": "^5.7.14",
    "@wdio/sync": "^5.7.13"
  }

WebdriverIO 的配置

exports.config = {
    user: process.env.BROWSERSTACK_USERNAME || 'XXX',
    key: process.env.BROWSERSTACK_ACCESS_KEY || 'YYY',
    specs: [
        './test/specs/**/*.js'
    ],
    // Patterns to exclude.
    exclude: [
        // 'path/to/excluded/files'
    ],
    maxInstances: 10,
    capabilities: [
        // Chrome and all other browsers work fine
        // {
        //     browser: 'Chrome',
        //     resolution: '1280x1024',
        //     os: 'Windows',
        //     os_version: '10',
        //     name: 'Chrome',
        //     project: 'TT UI',            
        //     'browserstack.networkLogs': true
        // },
        {
            browserName: 'Edge',
            browser_version: '18.0',
            resolution: '2048x1536',
            os: 'Windows',
            os_version: '10',
            name: 'Microsoft EDGE',
            project: 'TT UI',           
            'browserstack.networkLogs': true
        }
    ],
    // Level of logging verbosity: trace | debug | info | warn | error | silent
    logLevel: 'debug',
    waitforTimeout: 10000,
    connectionRetryTimeout: 90000,
    connectionRetryCount: 3,
    framework: 'mocha',
    mochaOpts: {
        ui: 'bdd',
        timeout: 60000
    }
}

描述错误
命令 browser.switchToFrame() 在 Microsoft Edge 版本 16、17 和 18 上不会切换到 iFrame。相同的命令和代码片段(请参阅重现部分)适用于 Chrome、FireFox、Safari 和 IE11。

再现

  • 选项 1(推荐)
    我已经设置了两个:

    • 命令的示例存储库(易于设置/使用): https :

    • 带有 iFrame 的静态页面: https :

npm run test:local请确保您的浏览器驱动程序已启动
npm run test:remote请确保您已在 wdio.remote.conf.js 中插入了 BrowserStack userkey

运行简单测试后,会在browser.switchToFrame(parentFrame)处启动错误并显示以下消息ERROR webdriver: Request failed due to no such frame: The specified frame was not found in the current frame or window.

  • 选项 2

在 Edge 女士 - 最好是 BrowserStack 上,但这应该没有任何区别 - 运行命令browser.switchToFrame(element)browser.switchToFrame(element.elementId)并且您遇到了在选项 1 中描述的相同错误

预期行为
预期的行为是能够切换到 iFrame 并能够在 MS Edge 上检索和定位其中的元素。

日志

控制台日志和 wdio 日志在这里共享gist

附加上下文
最初这个问题是在 Gitter 频道上提出的,今天与@christian-bromann 进行了讨论,他建议在这里创建一个更详细的问题。
请注意,我也检查了这个问题 3774,但它似乎无关,因为我在 GitHub 上共享的代码(请参阅上面的部分)在除 Edge 之外的所有浏览器上都能完美运行

最有用的评论

我已经找到了基于以下两个问题的解决方法:

这适用于 Chrome、FireFox、Ms Edge、IE11 和 Safari,所有这些都在 BrowserStack 下

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

所有3条评论

我已经找到了基于以下两个问题的解决方法:

这适用于 Chrome、FireFox、Ms Edge、IE11 和 Safari,所有这些都在 BrowserStack 下

let iFrame = $('//*[@name="iFrameSelector"]');
if (browser.capabilities.browserName === "MicrosoftEdge") iFrame = "iFrameSelector";
browser.switchToFrame(iFrame)

@christian-bromann 我很高兴结束这个问题,因为有一个有效且经过测试的解决方法。
谢谢

我无法让这个解决方案为他工作。 我尝试直接在 switchToFrame 上使用类名,但仍然看到相同的问题The specified frame was not found in the current frame or window. 。 只是为了正确理解您的解决方法,我是否应该直接在browser.switchToFrame(id or classname)给出类名或 ID。 那是对的吗?

更新:此解决方案适用于 chrome,即和边缘。 不适用于 safari

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

espekkaya picture espekkaya  ·  3评论

davidsoderberg picture davidsoderberg  ·  4评论

christian-bromann picture christian-bromann  ·  3评论

Pylipala picture Pylipala  ·  4评论

graingert picture graingert  ·  4评论