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";
    ....
}

Scroll to Top