【问题标题】:(MS Dynamics test automation) Can not switch to iframe, frames changing automatically(MS Dynamics 测试自动化)无法切换到 iframe,框架自动更改
【发布时间】:2026-01-20 01:05:01
【问题描述】:

我正在尝试使用 Selenium WebDriver 在 MS Dynamics 365 系统中切换帧。我将解释以下问题之一。这是html元素代码: element code here

通常,我使用 id=contentIFrame0 或 1,并且帧切换正常。问题是,MS Dynamics 动态生成这些 iframe,通常包含最多 3 个 iframe(contentIFrame0、contentIFrame1、contentIFrame2),但事实是您永远不知道它们在页面上会是 2 还是 1 以及为什么,所以如果您今天使用其中之一直接 - 明天您的测试将因更改而失败。 似乎我必须一直切换到最后一帧,但它是随机工作的,因为有时第一个包含元素,另一个包含脚本。我尝试做的另一件事是切换到一个具有以下属性的 iframe:样式 = 可见性:可见(在此之前,我尝试在控制台中打印驱动程序看到的可见帧数 - 但一直写为 0)。另外,如果我尝试在控制台中打印页面上有多少 iframe - 计数器是 2,但我可以看到 3。

如果有人尝试自动化 MS Dynamics 365 并遇到同样的问题? 我可能已经描述了所有情况,也许你会注意到其中的逻辑和区别。

【问题讨论】:

    标签: selenium selenium-webdriver iframe automated-tests dynamics-365


    【解决方案1】:

    我不确定这是否适用于您的情况,但请试一试。

    如果您知道要切换的框架中的元素之一,请使用 css 选择器或 xpath

    driver.switchTo().frame(driver.findElement(By.cssSelector("iframe[title='test']")));
    

    【讨论】:

      【解决方案2】:

      很难以这种方式进行测试,因为 Microsoft 不保证正在渲染的对象会保持不变。今天可能是 3 帧,但在下一个版本中,开发团队可能会或多或少地引入,不再支持直接使用 DOM。

      我强烈推荐以下用于测试 Dynamics 的框架:https://github.com/Microsoft/EasyRepro

      它将帮助您将测试提升一个级别,它引入了一个抽象级别,以便通过隔离框架代码中的所有低级工作来最大程度地减少直接使用 HTML 的需要。

      这是一篇关于 EasyRepro 的精彩帖子:http://www.itaintboring.com/dynamics-crm/easy-repro-what-is-it/

      祝你好运

      【讨论】:

        【解决方案3】:

        此 xpath 可靠地找到主窗格

        //iframe[contains(contains(@id,'contentIFrame') and contains(@style,'visible')]
        

        注意:不适用于 Dynamics 365 Unified Interface,它具有完全不同的 DOM。

        【讨论】:

          最近更新 更多