首页 > 解决方案 > 在 Selenium 测试期间访问 redux 状态

问题描述

在这里分享食谱,

对于我的应用程序,想要使用 Selenium 自动化用户 PoV 测试,并告诉自己能够通过 Selenium 读取状态和发送 redux 操作会很棒。

Selenium 由 NodeJ 驱动。

在节点 JS 中向应用发送 Redux 操作:

const state = await driver
      .executeAsyncScript(
        "window.stCap({action: arguments[0], cb: arguments[arguments.length - 1]});",
        { type: "global_ST_CAP_GET" }
      )

在其中一个帮助文件中:

let globalActionRequest;

export const globalActionRequestSet = ar => {
  globalActionRequest = ar;
};

window.stCap = function({ action, cb }) {
    globalActionRequest({
    ...action,
    cb
  });
};

在最顶级的 react 组件初始化之一(能够“进入”redux 世界......),放入globalActionRequest由提供的函数mapDispatchToProps

import { globalActionRequestSet } from "...appropriate file..."

class ... extends React.component {
    constructor(props) {
        super(props)
        globalActionRequestSet(props.actionRequest)
    }
    ...
}

mapDispatchToProps = {
    actionRequest: action => action
}

最后,在“sagas”文件中,执行一个动作来发回状态(稍后在驱动 selenium 的代码中使用)

const global_ST_CAP_GET = function* ({cb}) {
    const state = yield sagas.select(state => state);
    cb(state);
}

// to add into root sagas
fork(function*() {
    yield takeEvery("global_ST_CAP_GET", global_ST_CAP_GET);
})

使用这个技巧,可以使用一个工具(selenium)来测试应用程序的外部和内部(通过发送操作和读取 redux 状态)。

希望你会喜欢它,很高兴听到任何建议

标签: javascriptselenium-webdriverreact-redux

解决方案


推荐阅读