Prepare WebSocket endpoint
To start a desktop browser session correctly, a WebSocket endpoint is necessary because it specifies the type of browser and sets up the session configuration.
Mobitru supports standard Playwright WebSocket endpoint and Options, which are described here.
Below, it will be described how to prepare an Endpoint for standard and extended Browser session.
Standard Browser session
In order to start a standard Browser Session, you need to specify just playwright version and browser type.
Below, you can find example of the preparing standard endpoint for various browser types:
Chrome WS endpoint:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'chrome';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
test.setTimeout(120000);
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}`;
browser = await chromium.connect({
timeout: 0,
wsEndpoint: wsEndpoint
});
page = await browser.newPage({
ignoreHTTPSErrors: true,
viewport: ...
});
await page.goto(mobitruLandingUrl);
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "chrome";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.chromium().connect(wsEndpoint);
Page page = browser.newPage();
....
browser.close();
}
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'chrome'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
chromium = playwright.chromium
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}"
browser = chromium.connect(ws_endpoint=ws_endpoint)
page = browser.new_page()
....
yield page
browser.close()
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "chrome";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}";
using var playwright = Microsoft.Playwright.Playwright.CreateAsync().GetAwaiter().GetResult();
var browser = playwright.Chromium.ConnectAsync(wsEndpoint).GetAwaiter().GetResult();
var page = browser.NewPageAsync().GetAwaiter().GetResult();
....
browser.CloseAsync().GetAwaiter().GetResult();
}
Firefox WS endpoint:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'firefox';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
test.setTimeout(120000);
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}`;
browser = await firefox.connect({
timeout: 0,
wsEndpoint: wsEndpoint
});
page = await browser.newPage({
ignoreHTTPSErrors: true,
viewport: ...
});
await page.goto(mobitruLandingUrl);
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "firefox";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.firefox().connect(wsEndpoint);
Page page = browser.newPage();
....
browser.close();
}
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'firefox'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
firefox = playwright.firefox
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}"
browser = firefox.connect(ws_endpoint=ws_endpoint)
page = browser.new_page()
....
yield page
browser.close()
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "firefox";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}";
using var playwright = Microsoft.Playwright.Firefox.CreateAsync().GetAwaiter().GetResult();
var browser = playwright.Chromium.ConnectAsync(wsEndpoint).GetAwaiter().GetResult();
var page = browser.NewPageAsync().GetAwaiter().GetResult();
....
browser.CloseAsync().GetAwaiter().GetResult();
}
Safari WS endpoint:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'webkit';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
test.setTimeout(120000);
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}`;
browser = await webkit.connect({
timeout: 0,
wsEndpoint: wsEndpoint
});
page = await browser.newPage({
ignoreHTTPSErrors: true,
viewport: ...
});
await page.goto(mobitruLandingUrl);
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "webkit";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
try (Playwright playwright = Playwright.create()) {
Browser browser = playwright.webkit().connect(wsEndpoint);
Page page = browser.newPage();
....
browser.close();
}
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'webkit'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
webkit = playwright.webkit
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}"
browser = webkit.connect(ws_endpoint=ws_endpoint)
page = browser.new_page()
....
yield page
browser.close()
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "webkit";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}";
using var playwright = Microsoft.Playwright.Webkit.CreateAsync().GetAwaiter().GetResult();
var browser = playwright.Chromium.ConnectAsync(wsEndpoint).GetAwaiter().GetResult();
var page = browser.NewPageAsync().GetAwaiter().GetResult();
....
browser.CloseAsync().GetAwaiter().GetResult();
}
Mobitru-specific parameters
Mobitru supports various additional features, such as video recording.
All of them are available for most browsers and can be activated using the Mobitru-specific endpoint parameters.
Those parameters should be defined additionally and added to the WebSocket endpoint:
Video recording:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'chrome';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}?enableVideo=true`;
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "chrome";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s?enableVideo=true",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
....
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'chrome'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
chromium = playwright.chromium
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?enableVideo=true"
....
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "chrome";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?enableVideo=true";
....
}
Custom Locale or TimeZone:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'chrome';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}?env=LANG%3Dde_AT.UTF-8&env=LC_ALL%3Dde_AT.UTF-8&env=LANGUAGE%3Dat:de`;
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "chrome";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s?env=LANG%%3Dde_AT.UTF-8&env=LC_ALL%%3Dde_AT.UTF-8&env=LANGUAGE%%3Dat:de",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
....
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'chrome'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
chromium = playwright.chromium
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?env=LANG%3Dde_AT.UTF-8&env=LC_ALL%3Dde_AT.UTF-8&env=LANGUAGE%3Dat:de"
....
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "chrome";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?env=LANG%3Dde_AT.UTF-8&env=LC_ALL%3Dde_AT.UTF-8&env=LANGUAGE%3Dat:de";
....
}
Custom Host entries:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'chrome';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}?env=DISPLAY%3D127.0.0.1:0&host=example.com:99.80.6.196`;
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "chrome";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s?env=DISPLAY%%3D127.0.0.1:0&host%%3Dexample.com%%3A99.80.6.196",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
....
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'chrome'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
chromium = playwright.chromium
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?host%3Dexample.com%3A99.80.6.196"
....
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "chrome";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?host%3Dexample.com%3A99.80.6.196";
....
}
Headless mode:
const playwright = require('playwright-core');
const mobitruHost = "browserhub-us.mobitru.com";
const mobitruTeamCode = "<TEAM_CODE>";
const mobitruAccessToken = "mobitru_ak...";
const pwVersion = "1.55.0";
const mobitruLandingUrl = 'https://mobitru.com/';
const browserName = 'chrome';
test.describe(`Demo test`, () => {
....
test.beforeAll(async ({}, testInfo) => {
const wsEndpoint = `wss://${mobitruTeamCode}:${mobitruAccessToken}@${mobitruHost}/playwright/${browserName}/playwright-${pwVersion}?headless=false`;
....
});
....
private static final String PROJECT_NAME = "<TEAM_CODE>";
private static final String API_KEY = "mobitru_ak_...";
private static final String BROWSER_HUB = "browserhub-us.mobitru.com";
private static final String BROWSER_NAME = "chrome";
private static final String PW_VERSION = "1.54.0";
@Test
public void demoTest() {
String wsEndpoint = String.format("wss://%s:%s@%s/playwright/%s/playwright-%s?headless=false",
PROJECT_NAME, API_KEY, BROWSER_HUB, BROWSER_NAME, PW_VERSION);
....
}
import pytest
from playwright.sync_api import sync_playwright, Page, expect
BILLING_UNIT = '<TEAM_CODE>'
ACCESS_TOKEN = 'mobitru_ak_...'
MOBITRU_HOST = 'browserhub-us.mobitru.com'
BROWSER_NAME = 'chrome'
PW_VERSION = '1.55.0'
@pytest.fixture(scope="function")
def mobitru_page(request):
with sync_playwright() as playwright:
chromium = playwright.chromium
ws_endpoint = f"wss://{BILLING_UNIT}:{ACCESS_TOKEN}@{MOBITRU_HOST}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?headless=false"
....
private const string PROJECT_NAME = "<TEAM_CODE>";
private const string API_KEY = "mobitru_ak_....";
private const string BROWSER_HUB = "browserhub-us.mobitru.com";
private const string BROWSER_NAME = "chrome";
private const string PW_VERSION = "1.55.0";
[Test]
public void DemoTest()
{
string wsEndpoint = $"wss://{PROJECT_NAME}:{API_KEY}@{BROWSER_HUB}/playwright/{BROWSER_NAME}/playwright-{PW_VERSION}?headless=false";
....
}