Requestly for Selenium
This is the package for using Requestly in Selenium. Using Requestly you can Modify Headers, Redirect Request Url, Mock API response, Delay/Throttle requests, etc.
Installation
npm install selenium-webdriver @requestly/selenium
Usage
For Chrome
require("chromedriver");
const { Builder } = require("selenium-webdriver");
const chrome = require("selenium-webdriver/chrome");
const { getRequestlyExtension, importRequestlySharedList } = require("@requestly/selenium");
const options = new chrome.Options().addExtensions(
getRequestlyExtension("chrome")
);
const driver = new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
importRequestlySharedList(driver, <sharedList_URL>);
chromedriver
is an npm wrapper for selenium ChromeDriver.
For Firefox
require("geckodriver");
const { Builder } = require("selenium-webdriver");
const firefox = require("selenium-webdriver/firefox");
const { getRequestlyExtension, importRequestlySharedList } = require("@requestly/selenium");
const options = new firefox.Options().addExtensions(getRequestlyExtension("firefox"));
const driver = new Builder()
.forBrowser("firefox")
.setFirefoxOptions(options)
.build();
importRequestlySharedList(driver, <sharedList_URL>);
geckodriver
is an npm wrapper for selenium firefox.
For Edge
require('msedgedriver');
var webdriver = require('selenium-webdriver');
const edge = require("selenium-webdriver/edge");
const { getRequestlyExtension, importRequestlySharedList } = require("@requestly/selenium");
const options = new edge.Options().addExtensions(getRequestlyExtension("MicrosoftEdge"));
var driver = new webdriver.Builder()
.forBrowser('MicrosoftEdge')
.setEdgeOptions(options)
.build();
importRequestlySharedList(driver, <sharedList_URL>);
msedgedriver
is an npm wrapper for selenium edge.
Shared List
Users can share Requestly Rules with other users using Shared Lists which is used for importing rules into Selenium webdriver.
Find more information here
Example Snippets
Almost all websites contain content-security-policy
and X-Frame-Options
header due to which the browser does not the allow the website to open in iframe.
You can try this sharedlist to open websites in iframe:
https://app.requestly.io/rules/#sharedList/1628536158787-Open-Websites-in-iframe
Snippet to open linkedin in iframe in selenium
require("chromedriver");
const { Builder } = require("selenium-webdriver");
const chrome = require("selenium-webdriver/chrome");
const {
getRequestlyExtension,
importRequestlySharedList,
} = require("@requestly/selenium");
const options = new chrome.Options().addExtensions(
getRequestlyExtension("chrome")
);
const driver = new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
importRequestlySharedList(
driver,
"https://app.requestly.io/rules/#sharedList/1628536158787-Open-Websites-in-iframe"
);
driver.get("https://jsbin.com/zotofulofu/2/edit?html,output");
Try opening the above jsbin
without the importRequestlySharedList
step. Did linkedin
load in iframe
without that step?
Snippet to throttle network using Selenium for Application Testing
In this example, we'll delay network request for https://www.google.com
This SharedList will be used to delay google.com
Let's start by installing the dependencies and importing them into our project
npm install selenium-webdriver @requestly/selenium
require("chromedriver");
const { Builder } = require("selenium-webdriver");
const chrome = require("selenium-webdriver/chrome");
const {
getRequestlyExtension,
importRequestlySharedList,
} = require("@requestly/selenium");
Now that we've all the dependencies into our project, let's create a variable to store our shared list link
const sharedListUrl =
"https://app.requestly.io/rules/#sharedList/1631611216670-delay";
We now have all the components to write our function.
async function delayGoogle() {
const options = new chrome.Options().addExtensions(
getRequestlyExtension("chrome")
);
const driver = new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
await importRequestlySharedList(driver, sharedListUrl);
driver.get("http://www.google.com/");
}
Now, on running the function, we'll experience a network delay for google.com
Find more detailed steps, click here