@requestly/selenium
Version:
Package for using Requestly in Selenium webdriver
176 lines (124 loc) • 5.28 kB
Markdown
# Requestly for Selenium
This is the package for using [Requestly](https://requestly.io) in [Selenium](https://www.selenium.dev/). Using Requestly you can Modify Headers, Redirect Request Url, Mock API response, Delay/Throttle requests, etc.
## Installation
```sh
npm install selenium-webdriver /selenium
```
## Usage
### For Chrome
```js
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();
// Imports Rules in Selenium using Requestly sharedList feature
importRequestlySharedList(driver, <sharedList_URL>);
```
> `chromedriver` is an npm wrapper for selenium ChromeDriver.
### For Firefox
```js
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();
// Imports Rules in Selenium using Requestly sharedList feature
importRequestlySharedList(driver, <sharedList_URL>);
```
> `geckodriver` is an npm wrapper for selenium firefox.
### For Edge
```js
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();
// Imports Rules in Selenium using Requestly sharedList feature
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](https://requestly.io/blog/2018/06/14/share-rules-with-other-users/)
---
## 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](https://app.requestly.io/rules/#sharedList/1628536158787-Open-Websites-in-iframe)
### Snippet to open linkedin in iframe in selenium
```js
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();
// Imports Rule to load linkedin in iframe
importRequestlySharedList(
driver,
"https://app.requestly.io/rules/#sharedList/1628536158787-Open-Websites-in-iframe"
);
// Opens a jsbin which loads linkedin 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](https://app.requestly.io/rules/#sharedList/1631611216670-delay) will be used to delay google.com
Let's start by installing the dependencies and importing them into our project
```js
npm install selenium-webdriver /selenium
```
```js
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
```js
const sharedListUrl =
"https://app.requestly.io/rules/#sharedList/1631611216670-delay";
```
We now have all the components to write our function.
```js
async function delayGoogle() {
const options = new chrome.Options().addExtensions(
getRequestlyExtension("chrome") // This installs requestly chrome extension in your testing instance
);
const driver = new Builder()
.forBrowser("chrome")
.setChromeOptions(options)
.build();
await importRequestlySharedList(driver, sharedListUrl); // Here we import the shared list we created some time back
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](https://requestly.io/blog/2021/09/20/automate-testing-via-selenium/)