Skip to content

Commit ff9c406

Browse files
Merge pull request #13 from qavajs/connect-via-cdp
added capability to connect to browser via CDP
2 parents cafa721 + 001773a commit ff9c406

File tree

4 files changed

+56
-20
lines changed

4 files changed

+56
-20
lines changed

CHANGELOG.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
## Current
2+
- :rocket: added capability to connect via CDP
3+
14
## 0.0.6
2-
- fixed issue in After hook if browser is not started
3-
- added I save css property step
4-
- added I expect css property step
5-
- added capability to connect to playwright server
5+
- :beetle: fixed issue in After hook if browser is not started
6+
- :rocket: added I save css property step
7+
- :rocket: added I expect css property step
8+
- :rocket: added capability to connect to playwright server

README.md

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
# @qavajs/steps-playwright
44
Step library to work with playwright in qavajs framework
55

6-
## installation
6+
## Installation
77

88
`npm install @qavajs/steps-playwright`
99

10-
## configuration
10+
## Configuration
1111
```javascript
1212
const App = require('./page_object');
1313
module.exports = {
@@ -21,15 +21,37 @@ module.exports = {
2121
visible: 20000
2222
},
2323
capabilities: {
24-
browserName: 'chrome'
24+
browserName: 'chromium'
2525
}
2626
},
2727
pageObject: new App()
2828
}
2929
}
3030
```
3131

32-
## screenshot strategy
32+
## Connect to playwright server
33+
In order to connect to playwright server pass _wsEndpoint_ property in capabilities object
34+
```typescript
35+
{
36+
capabilities: {
37+
browserName: 'chromium',
38+
wsEndpoint: 'ws://127.0.0.1:60291/2bd48ce272de2b543e4c8c533f664b83'
39+
}
40+
}
41+
```
42+
43+
## Connect to cdp endpoint
44+
In order to connect to CDP endpoint pass _cdpEndpoint_ property in capabilities object
45+
```typescript
46+
{
47+
capabilities: {
48+
browserName: 'chromium',
49+
cdpEndpoint: 'http://localhost:9222/'
50+
}
51+
}
52+
```
53+
54+
## Screenshot strategy
3355
@qavajs/steps-playwright has build-in capability to take screenshot on particular event. If you need to add
3456
screenshot to your report add _screenshot_ property to profile config.
3557
Supported events:

src/driverProvider.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { chromium, firefox, webkit, Browser, BrowserType } from 'playwright';
2+
const browsers: any = { chromium, firefox, webkit };
3+
4+
export async function driverProvider(driverConfig: any): Promise<Browser> {
5+
const browserName: string = driverConfig?.capabilities?.browserName ?? 'chromium';
6+
const browserType: BrowserType = browsers[browserName];
7+
if (driverConfig?.capabilities?.wsEndpoint) {
8+
return browserType.connect(
9+
driverConfig?.capabilities?.wsEndpoint,
10+
driverConfig.capabilities
11+
);
12+
} else if (driverConfig?.capabilities?.cdpEndpoint) {
13+
return browserType.connectOverCDP(
14+
driverConfig?.capabilities?.cdpEndpoint,
15+
driverConfig.capabilities
16+
);
17+
} else {
18+
return browserType.launch(driverConfig.capabilities);
19+
}
20+
}

src/hooks.ts

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { After, AfterStep, Before, BeforeStep, Status } from '@cucumber/cucumber';
22
import defaultTimeouts from './defaultTimeouts';
3-
import { chromium, firefox, webkit, Browser, BrowserContext, Page, BrowserType } from 'playwright';
3+
import { Browser, BrowserContext, Page } from 'playwright';
44
import { po } from '@qavajs/po-playwright';
55
import { ScreenshotEvent } from './screenshotEvent';
6-
const browsers: any = { chromium, firefox, webkit };
6+
import { driverProvider } from './driverProvider';
77

88
declare global {
99
var browser: Browser;
@@ -19,16 +19,7 @@ Before(async function () {
1919
defaultTimeouts,
2020
...driverConfig.timeout
2121
}
22-
const browserName: string = driverConfig?.capabilities?.browserName ?? 'chromium';
23-
const browserType: BrowserType = browsers[browserName];
24-
if (driverConfig?.capabilities?.wsEndpoint) {
25-
global.browser = await browserType.connect(
26-
driverConfig?.capabilities?.wsEndpoint,
27-
driverConfig.capabilities
28-
)
29-
} else {
30-
global.browser = await browserType.launch(driverConfig.capabilities);
31-
}
22+
global.browser = await driverProvider(driverConfig);
3223
global.context = await browser.newContext();
3324
global.page = await browser.newPage({ viewport: null });
3425
global.driver = global.browser;

0 commit comments

Comments
 (0)