npm:wtester | Skypack
You need to enable JavaScript to run this app.
Usage no npm install needed!
<script type="module">
import wtester from 'https://cdn.skypack.dev/wtester';
</script>
README
The simple integration testing tools for website
Features
auto inject the code to web page and run it code on browser(not nodejs).
transfter running context between two page.
load browser by configure.
multi spec supported
custom nodejs command supported(having some inner command, see reference)
Install
Install webdriver-manager
npm install -g webdriver-manager
webdriver-manager update
more is on https://github.com/angular/webdriver-manager
Install wtester
npm install -g wtester
Start
Create test spec(testBing.js)
wtester("bing", "http://www.bing.com", null, function (flow, command) {
flow("^.*\\.bing\\.com/(\\?.*)?
quot;, true, function (env, done) {
document.getElementById("sb_form_q").value = "github centny";
document.getElementById("sb_form_go").click();
done();
});
flow("^.*\\.bing\\.com/search.*quot;, false, function (env, done) {
var as = document.getElementsByTagName("a");
for (var i = 0; i < as.length; i++) {
if (as[i].href == 'https://github.com/Centny') {
done();
return;
}
}
throw "fail";
});
});
Create configure file(wtester-conf.js)
exports.config = {
port: 8880,//proxy port
selenium: 'http://127.0.0.1:4444/wd/hub',
specs: [
'testBing.js',
],
capabilities: {
'browserName': 'chrome',
"loggingPrefs": {
"driver": "INFO",
"browser": "ALL"
},
},
};
Run
wtester wtester-conf.js
Run the more exampe
git clone https://github.com/Centny/WebTester.git
cd WebTester/test
npm install connect serve-static
./run.js
webdriver-manager start
cd WebTester/test
wtester wtester-conf.js
Reference
wtester(name,starter,opts,exec)
name
required,string the case name
start
required,string the start url
opts
optional,object the options for tester, deafult null
ctx
object, the initial context to run test.
exec
required,function the flow executor, the argument is flow,command
flow
fuction, adding test case step
command
function, adding custom command
flow(murl,open,worker,pre)
murl
required,string the url regex pattern to match page for run the worker
open
required,bool not used now
workder
required,function the test code which running on browser, the argument is env,done
env
object, the current env transfter from prefix workder
done
function, completed current worker, not arguments.
pre
optional,function the workder to initial something for the test workder
command(name,worker)
name
required,string the command name.
workder
required,function the command executor, the argument is env,args,done
env
object, the enviroment for running workder
env.browser
object, the webdriver object from selenium-webdriver
env.By
object, the By tools from selenium-webdriver
env.until
object, the until tool from selenium-webdriver
args
object, the command arguments from caller
done
function, completed the current worker and return the data or error, the argument is data,err
tester
tester object contain some event handler and util function.
tester.init
the initial function before call flow
tester.readfile
the util to read file sync.
Custom Command
wtester("case1", "http://localhost:8080/web/page1.html", {
//the intitial test case env.
ctx: {
ws: __dirname,
},
}, function(flow, command) {
command("title", function(env, args, done) {
//the custom command on nodejs
env.browser.getTitle().then(function(title) {
done(title, null);
});
});
flow("^http://localhost:8080/web/page1\\.html(\\?.*)?quot;, true, function(env, done) {
//the test code on page1.html
env.ctx.testing = "login";
env.exec("title", {}, function(data, err) {//exec custom command
if (err) {
throw err;
}
document.getElementById("login").click();
console.log("testing click login done...");
done();
});
}, function(env, done) {
done();
}).debug({});
});
Inner Command
sendkeys
calling webdriver sendkey
by
required, the selector type in id/xpath/css, see more for webdriver document.
selector
required, the selector value, like element id
file
optional, the file path
value
optional, the value.
wtester("case1", "http://localhost:8080/web/page1.html", {
//the intitial test case env.
ctx: {
ws: __dirname,
},
}, function(flow, command) {
flow("http://localhost:8080/web/page2\\.html(\\?.*)?", false, function(env, done) {
//the test code on page2.html
if (env.ctx.testing != "login") {
throw "fail";
}
document.getElementById("account").value = "abc";
env.exec("sendkeys", {//exec inner command, eg: set file path for input
by: "id",
selector: "file",
file: env.ctx.ws + "/../data/test.txt",
}, function(data, err) {
if (err) {
throw err;
}
var file = document.getElementById("file");
if (!file.value) {
throw "not fild";
}
console.log(file.value);
console.log("testing login done...");
done();
});
}).debug({//debug the test code on page2.
ctx: {
testing: "login",
},
});
});
readfile
read file
name
required, the file name
wtester("cmd", "http://localhost:8080/web/page1.html", {
//the intitial test case env.
ctx: {
ws: __dirname,
},
}, function (flow, command, tester) {
flow("^http://localhost:8080/web/page1\\.html(\\?.*)?quot;, true, function (env, done) {
//the test code on page1.html
env.exec("readfile", {
name: env.ctx.ws + "/../data/test.txt",
}, function (data, err) {
if (data !== "abc") {
throw "error";
}
done();
});
});
});
conf.settings Reference
fullscreen
if do fullscreen when spec start or not
Context Reference
the example config.js
exports.config = {
port: 8880,//proxy port
selenium: 'http://127.0.0.1:4444/wd/hub',
specs: [
'e2e/testSpec.js',
'e2e/testSpec2.js',
{
specs: [
'e2e/testCtx01.js',
'e2e/testCtx02.js'
],
settings: {
"context": 1,
},
},
{
specs: [
'e2e/testSpec.js',
'e2e/testSpec2.js',
],
},
"e2e/testCmd.js",
"e2e/testMulti.js",
"e2e/testTester.js",
],
capabilities: {
'browserName': 'chrome',
"loggingPrefs": {
"driver": "INFO",
"browser": "ALL"
},
"chromeOptions": {
"args": ['--start-maximized']
}
},
settings: {
"fullscreen": 1,
},
};
conf.specs
is not in the same context.
e2e/testCtx01.js,e2e/testCtx02.js
is the same context control by context:1
Debug Test Case
For debug test case on browser, you cant adding <script type="text/javascript" src="e2e/testSpec.js" />
on your page and adding blow code to simple start flow by matchi url
if (typeof wtester === 'undefined') {
if (typeof module !== 'undefined' && module.exports) {//on nodejs debug
wt = require("wtester");
wtester = wt.wtester;
} else {//on browser debug
wtester = function(name, starter, opts, exec) {
exec(function(murl, open, worker, pre) {
return {
debug: function(env) {
if (!env.ctx) {
env.ctx = {};
}
if (pre) {
pre(env, function() {
if (window.location.href.match(murl)) {
worker(env, function() { });
}
});
} else {
if (window.location.href.match(murl)) {
worker(env, function() { });
}
}
},
};
}, function(env, args, done) {
});
};
}
}
Details
Updated
November 23, 2016
Created
November 14, 2016
Package Security
ES Module Entrypoint
Info
Export Map
Info
Keywords
Info
added
License
added
README
added
Repository URL
TypeScript Types
Info
License
MIT
Dependencies
3