步前空手道

BeforeStep Karate

我正在使用 iFramed web(微前端),iFrame 包裹了整个主体(其中的元素),每次加载页面时我都需要切换 iFrame。

Given driver siteUrl
And call read('classpath:web/pages/login/login.feature@login_with_email') args
* def args = {main_menu: fleet-management, submenu: Truk}
And call read('classpath:web/internal/pages/dashboard/dashboard.feature@open_page') args
# LOAD NEW PAGE
* waitFor(iFrameId).switchFrame()
And click(pageA.elementA)
# LOAD NEW PAGE
* waitFor(iFrameId).switchFrame()
And click(PageB.elementB)

由于switchFrame会被频繁使用,beforeStep将是一个很好的解决方案。 我做过研究:

Hook.java

    @Override
    public boolean beforeStep(Step step, ScenarioRuntime sr)
    {
        Runner.runFeature("classpath:utils/helper.feature@switch_frame", null, false);
    }

helper.feature

Feature: Test Feature For Switch Frame
  @switch_frame
  Scenario: Switching focus to iFrame
    * waitFor(iFrameId).switchFrame()

但现在我卡住了,从 hook.java 调用的 helper.feature 无法使用任何关键字(waitFor, switchFrame) 并且无法从 karate-config.js.

获取全局变量集

请帮忙,谢谢!!

不,我认为这是 over-engineering 而 Runner.runFeature() 并非设计用于此。

你把框架切换和点击合并成一个功能怎么样:

* def frameClick = function(frame, locator){ waitFor(frame).switchFrame(); click(locator) }

现在您可以:

* frameClick(iFrameId, pageA.elementA)

你甚至可以更聪明地设置 frameId one-time:

* frameClick(pageA.elementA)