在Nightwatch.js中通过.execute()注入Web3提供程序时出错

时间:2018-09-05 19:24:53

标签: selenium ethereum nightwatch.js web3

我正在尝试将window变量设置为web3钱包提供程序(与以太坊开发有关),到目前为止,使用.execute()一直没有成功。

这是我的代码:

globals.js

const Web3 = require('web3')
const PrivateKeyProvider = require("truffle-privatekey-provider")
const rinkeby = "https://rinkeby.infura.io/" + INFURA
const provider = new PrivateKeyProvider(PK, rinkeby)
const web3 = new Web3(provider)
console.log(web3)
module.exports = {
  web3: web3
}

injected-web3-tests.js

browser
  .execute(function(data) {
    // var canUseDOM = !!(typeof window !== 'undefined' & window.document)
    return window.web3 = data
  }, [test], function(response) {
    console.log(response.value) //prints console result of returned web3 
  }))

这是一个使用赛普拉斯(测试框架)的类似工作示例:

cy.on("window:before:load", (win) => {
  const provider = new PrivateKeyProvider(Cypress.env("ETH_PRIV_KEY"), Cypress.env("ETH_PROVIDER"));
  win.web3 = new Web3(provider); // eslint-disable-line no-param-reassign
});

我得到的错误是: Error while running execute command: Converting circular structure to JSON

我的猜测是,由于browser.execute()似乎返回控制台返回的JSON格式版本,并且由于无法将web3提供程序类转换为JSON(循环引用),因此无法将window变量设为组。

我的问题是-还有另一种方法吗?我研究过尝试使用Selenium WebDriver API方法,例如.addScriptToEvaluateOnNewDocument

...但是我也不确定如何在Nightwatch中执行此操作。如果可以解决的话,我想为Nightwatch上的web-3注入测试制作一个NPM模块,因为我无法在线找到任何东西进行e2e DApp测试。

0 个答案:

没有答案