我正在尝试将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测试。