using Webdriverio service, when running as script (no test) - webdriver-io

I wrote a webdriver.io script for scrapping a website.
The way to start such script is by running it through node command i.e.:
node my-webdriverio.js
I want to install some Webdriverio services, specifically:
https://webdriver.io/docs/devtools-service/#cdp-command for using the CDP protocol in my script.
The problem is that the only way to register a service is by setting it into wdio.conf.js file like this:
export.config = {
// ...
services: ['devtools'],
// ...
};
the problem is that for using this method you must run it as a test (i.e. npx wdio wdio.conf.js)
but because I am using the "run in a script" option, I can't find any way to register a service
https://webdriver.io/docs/gettingstarted#run-in-a-script
and web I am trying to check if I have the cdp capability I am getting undefined:
console.log(typeof browser.cdp); // undefined
So my question is, how can I register a service, or even better how can I use the 'devtool' service when running Webdriverio as a script?

Related

Unable to run testcafe tests on CI/CD gitlab but works fine locally on the runner

I am seeing an issue running testcafe tests on the gitlab runner. The tests runs fine locally on the gitlab runner, but when run off the CI/CD pipeline it fails. Below is my .yaml code -
test-e2e-windows:
stage: test
cache:
<<: *global_cache
policy: pull
#needs: ['yarn-install']
tags:
- win32
script:
- yarn install
- yarn run test:e2e
Below is the error I see -
$ yarn run test:e2e
Running tests in:
Chrome 99.0.4844.82 / Windows 10
Audio Configuration Combination
× Inbuilt_Mic_Recording_1Ch_48 khz_16 bit_64 kbps_opus_webm
A JavaScript error occurred on
"https://dolby-web-sdk-dev.net/sandbox/index.html".
Repeat test actions in the browser and check the console for errors.
To ignore client-side JavaScript errors, enable the
"--skip-js-errors" CLI option, or set the "skipJsErrors"
configuration file property to "true".
If the website only throws this error when you test it with
TestCafe, please create a new issue at:
"https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md".
JavaScript error details:
NotFoundError: Requested device not found
No stack trace available
Am I missing something here?
According to the "Requested device not found" error message, this issue is related to your application implementation:
DOMException: Requested device not found GetUserMedia.
Requested device not found - Unable to access Camera and Microphone
I can assume that it tries to access some device on a virtual machine but fails due to the fact that this device does not exist. In my opinion, the best way to resolve this issue is to manually handle this error in your application.
If my assumptions are wrong, please create a new GitHub issue using this template and share a minimal working example illustrating the issue.

How to pass in custom parameter for running tests on particular env

I am running my tests using - .testcaferc.json file and command that I am using to run is : node node_modules/testcafe/bin/testcafe
I want to pass an additional parameter for running my different tests on different environments. When I tried to add that parameter in command: node node_modules/testcafe/bin/testcafe production then I am not able to it as it consider them as tests.
Please let me know how can I handle this.
You can use the environment variables for this case.
Set the environment variable
// Enviroment variable set is platform specific
// See https://devexpress.github.io/testcafe/documentation/recipes/configuration/access-environment-variables-in-tests.html#set-environment-variables
export production=true
testcafe chrome test.js
and use it in a test
fixture ('Fixture');
test('test', async t => {
console.log(process.env.production);
});

How to get rid of the BrowserStack Local extension popup using ChromeDriver Chrome and Selenium

Am just new to automation and trying to automate browserstack. And i successfully logged to browserStack and passed the credentials and clicked on adding chrome extension . There comes the popup and am unable to get the selector for the buttons in the popup.Did any body face across this issue.
Am using an internal tool to automate,behind the scene i guess its using selenium.
Can anybody help me to find the selectors for the popup in browser stack.
Will attach the screenshot
Any help will be hihly helpful,since its a big blocker for me
If you want to Automate a local hosted URL or internal URL you will have to use BrowserStack Local testing feature. There is no need to add this extension.
There is one documentation on How to Perform local testing. All the steps are mentioned in the documents.
BrowserStack Automate Local Testing
If your usecase involves adding the BrowserStack Local or any other extension as a part of your Test Strategy you need to do it programatically.
You can find a couple od relevant discussions in:
How to install extension permanently in geckodriver
How to load extension within chrome driver in selenium with python
Alternative
As an alternative you can enable Enabling Local Testing either programatically through language bindings or through the command-line interface as follows:
Using language bindings:
Java:
import com.browserstack.local.Local;
# creates an instance of Local
Local bsLocal = new Local();
# replace <browserstack-accesskey> with your key. You can also set an environment variable - "BROWSERSTACK_ACCESS_KEY".
HashMap<String, String> bsLocalArgs = new HashMap<String, String>();
bsLocalArgs.put("key", "<browserstack-accesskey>");
# starts the Local instance with the required arguments
bsLocal.start(bsLocalArgs);
# check if BrowserStack local instance is running
System.out.println(bsLocal.isRunning());
#stop the Local instance
bsLocal.stop();
Steps for using command line:
Download the matching binary for your os: OS X / Linux 32 bit / Linux 64 bit / Windows
Untar/Unzip the binary to a folder/directory on your system.
Open your command-line interface and navigate to the folder containing the Local binary.
Run the binary using the following command:
//OS X/Linux
./BrowserStackLocal --key ACCESS_KEY
//Windows
BrowserStackLocal.exe --key ACCESS_KEY
Configure tests to run with Local Testing connection as follows:
caps.setCapability("browserstack.local", "true");

How can I set up TestCafe to run on an environment specified in the CLI?

How can I set up TestCafe to run on an environment specified in the CLI?
For example
testcafe chrome test.js --env=development
I want to set up a list of different environments - such as development, integration, etc - in which I can call in the CLI when running the tests.
Is there a default set-up of this in the config?
Does anyone have an example?
TEST_ENV=development npm run test:firefox
Above is the command to run test.
Use this environment variable via process.env.Test_ENV, wherever you need to pass 'development' or any other environment as value. The script,
"scripts": {
"test:firefox": "testcafe firefox ./tests"}

Starting protractor execution from a selenium session

How can we use protractor with an existing selenium browser session rather than always create a new one. If I have started up a selenium browser session, run some tests in there, and exported the session ID into the environment conf file in protractor or in some other way made it available, it would be nice to be able to configure protractor in the normal way (e.g. using an option in the protractor configuration file) to access this session.
I would need to start a protractor execution in the middle of a selenium execution, do some test, and come back to selenium execution. Something like pseudo-code snippet would really help.
You'll need to session id from the launched browser. You should be able to get it from the http://localhost:4444/wd/hub/static/resource/hub.html. So let's say this session id is '12345', you have two options, you could pass it as a command line or via the configuration file.
command line
protractor protractor.conf.js --seleniumSessionId=12345
configuration file
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
seleniumSessionId: '12345',
...
}
After you have set the selenium session id, you should be able to use the browser session. An example of this being exercised is: https://github.com/angular/protractor/blob/master/scripts/driverProviderAttachSession.js
If you would like to read more about it, I also have a medium post about this feature that I might have worked on: https://medium.com/#cnishina/attaching-a-protractor-test-to-an-existing-selenium-session-931196936ae2