This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Getting Started with WebDriverIO and CrossBrowserTesting

Want a powerful and easy to use command line tool for running Selenium-JS tests? Like to shy away from asynchronous commands and race conditions? WebDriverIO might be the option for you. WebDriverIO provides language-bindings for the powerful browser-driving tool Selenium. Its test runner allows you to write your tests in a synchronous way so that you're not constantly in the world of asynchronous coding. Luckily WebDriverIO integrates easily with the CrossBrowserTesting platform, so you can perform tests on a wide variety of OS/Device/Browser combinations, all from one test. Let's walk through getting WebDriverIO tests running with CrossBrowserTesting.

Install and run app locally

Clone a repo

https://github.com/crossbrowsertesting/selenium-webdriverio.git

Install the node modules

npm install

Add a username and auth key

Replace process.env.CBT_USERNAME and process.env.CBT_AUTHKEY with your username (CBT email) and secret auth key (find this under the "Manage Account")

Run the test

wdio or ./node_modules/.bin/wdio

OR

Starting from Scratch

You can configure WebDriverIO to use many different testing frameworks, such as Chai or Mocha, and you can read more on that here. For our purposes, we'll start by writing a simple test using WebDriverIO with Mocha.

Simple Test

First, create a folder for your test. From inside that folder, run the following commands (the npm init command will prompt for information about your project; if you are unsure, it is fine to leave those fields blank):

npm init -y
npm install --save-dev @wdio/cli
npm install --save-dev @wdio/local-runner
npm install --save-dev @wdio/spec-reporter
npm install --save-dev request

npm init -y starts your project, npm install --save-dev @wdio/cli installs WebDriverIO into your project, npm install --save-dev @wdio/local-runner allows local running of tests, npm install --save-dev @wdio/spec-reporter formats test output in spec style and npm install --save-dev request installs the request module.

Test with Mocha

The process of using WebDriverIO with other frameworks will vary slightly with each framework. Several frameworks are supported with the configuration tool, which can be started up with the command ./node_modules/.bin/wdio config. This will give a series of prompts and create a configuration file with the information you provide. We'll be manually creating our configuration file for this example.

First, you will need to install the WebDriverIO/Mocha adapter and the CBT WDIO service:

npm install --save-dev @wdio/mocha-framework
npm install --save-dev @wdio/crossbrowsertesting-service

Next, you'll need to make a configuration file. We're going to manually make one in this guide, but if you'd like to use WebDriverIO's configuration tool, you can run it with ./node_modules/.bin/wdio config.

Save the following code as "wdio.conf.js" in the root directory of your project:

exports.config={runner: 'local',hostname: 'hub.crossbrowsertesting.com',port: 80,path: '/wd/hub',services: ['crossbrowsertesting'],user: process.env.CBT_USERNAME,key: process.env.CBT_AUTHKEY,cbtTunnel: false,//set to true if a local connection is neededspecs: ['./test/specs/**/*.js'],exclude: [// 'path/to/excluded/files'],maxInstances: 10,capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],logLevel: 'info',bail: 0,baseUrl: 'http://localhost',waitforTimeout: 10000,connectionRetryTimeout: 90000,connectionRetryCount: 3,framework: 'mocha',reporters: ['spec'],mochaOpts: {ui: 'bdd',timeout: 60000}}

All that's left to do now is add your tests! The directory we specified in the config file is /test/specs, so place your tests there. Here is the sample test we'll use saved in a file named login.js:

constrequest=require('request');constassert=require('assert');describe("Login form",function(){//this.timeout(5 * 1000 * 60);it('should have the right title',async()=>{awaitbrowser.url("https://crossbrowsertesting.github.io/login-form.html")//Enter the usernameletusername=browser.$("#username");awaitusername.click();awaitusername.setValue("tester@crossbrowsertesting.com");//Enter the passwordletpassword=browser.$("#password");awaitpassword.click();awaitpassword.setValue("test123");// Click "Login"awaitbrowser.$("div.form-actions>button").click();// Get the titlelettitle=await(browser.getTitle());try{//Check titleassert.deepStrictEqual(title,"Login Form - CrossBrowserTesting.com");}catch(e){//Set score and throw exception so WebDriverIO detects itsetScore("fail");throw(e);}setScore("pass");});});//Helper to set the scorefunctionsetScore(score){constresult={error: false,message: null};if(browser.sessionId){request({method: 'PUT',uri: 'https://crossbrowsertesting.com/api/v3/selenium/'+browser.sessionId,body: {'action': 'set_score','score': score},json: true},function(error,response,body){if(error){result.error=true;result.message=error;}elseif(response.statusCode!==200){result.error=true;result.message=body;}else{result.error=false;result.message='success';}}).auth(process.env.CBT_USERNAME,process.env.CBT_AUTHKEY);}else{result.error=true;result.message='Session Id was not defined';}}

Converting Existing Test Suites

If you're already a WebDriverIO user, you can quickly change your current tests by making the following changes to your webdriver configuration:

Before:

varoptions={desiredCapabilities: {browserName: 'firefox'}};

Now:

exports.config={runner: 'local',hostname: "hub.crossbrowsertesting.com",port: 80,path: '/wd/hub',user: 'you@yourdomain.com',// the email address associated with your CBT accountkey: 'yourauthkey',// find this under the "Manage Account page of our app"capabilities: [{maxInstances: 5,platformName: 'Windows 10',browserName: 'chrome',browserVersion: 93,'cbt:options': {'name': 'WDIO Selenium Test Example','build': '1.0','screenResolution': '1366x768','record_video': 'true','record_network': 'false',}}],}

Run your test using the command:

./node_modules/.bin/wdio

As you can see, we're now pointing the test at our hub rather than a local driver instance.

Using the Local Connection

If you would like to test behind your firewall or access non-public sites, you can use our local connection tool through our WebdriverIO service. Simply install our service by running the command:

npm install --save-dev @wdio/crossbrowsertesting-service

Then add the following to your wdio.conf.js file :

exports.config={// ...services: ['crossbrowsertesting'],cbtTunnel: true,// ...};

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages