Skip to content
This repository was archived by the owner on Jan 30, 2025. It is now read-only.
This repository was archived by the owner on Jan 30, 2025. It is now read-only.

Metric emitted with empty URL #381

@imiric

Description

@imiric

xk6-browser version: 20002a4

Browser version: Chromium 102.0.5005.61

OS: Linux

Description

As reported on the forum, sometimes we emit a browser_dom_content_loaded metric that has an empty URL tag.

This might be because of a navigation in progress, so likely some race condition, but it seems that Frame.URL() is empty here:

xk6-browser/common/frame.go

Lines 356 to 360 in 20002a4

state := f.vu.State()
tags := state.CloneTags()
if state.Options.SystemTags.Has(k6metrics.TagURL) {
tags["url"] = f.URL()
}

Steps to reproduce

I wasn't able to reproduce this with the fillform.js example, but I did run into it with the following script:

vistaprint.js
import { sleep, group } from 'k6';
import launcher from 'k6/x/browser';

import { randomIntBetween } from 'https://jslib.k6.io/k6-utils/1.1.0/index.js';

export const options = {};

let browser, context, page;

const pauseMin = 0;
const pauseMax = 1;

export default function() {
  initialize();

  navigateToHomepage();
  clickBusinessCards();
  clickBrowseDesigns();
  clickDesign();
  clickCustomizeDesign();
  clickNext();
  continueWithoutBack();
  customerReviewed();
  addToCart();
  continuePastRecommendations();
  continueToCart();
  goToCheckout();
}

function initialize() {
  browser = launcher.launch('chromium', {
    args: [],
    debug: false,
    devtools: false,
    env: {},
    // executablePath: null,
    headless: __ENV.XK6_HEADLESS ? true : false,
    ignoreDefaultArgs: [],
    proxy: {},
    slowMo: '500ms',
    timeout: '30s',
  });

  context = browser.newContext({
    ignoreHTTPSErrors: true,
    screen: {width: 1920, height: 1080},
    viewport: {width: 1920, height: 1080},
  });

  page = context.newPage();
}

function navigateToHomepage() {
  console.log('Starting navigateToHomepage...');

  group("Navigate to Homepage", () => {
    page.goto('https://vistaprint.ca', { waitUntil: 'networkidle' });
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function clickBusinessCards() {
  console.log('Starting clickBusinessCards...');

  group("Click Business Cards", () => {
    page.click("//span[text()='Business Cards']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function clickBrowseDesigns() {
  console.log('Starting clickBrowseDesigns...');

  group("Click Browse Designs", () => {
    page.waitForSelector("//a[text()='Browse designs']");
    page.click("//a[text()='Browse designs']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function clickDesign() {
  console.log('Starting clickDesign...');

  const designOption = page.waitForSelector(`li.design-tile >> nth=0`);
  console.log(designOption.textContent());

  group("Select Design Option", () => {
    page.click(`li.design-tile >> nth=0`)
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function clickCustomizeDesign() {
  console.log('Starting clickCustomizeDesign...');


  group("Click Customize Design", () => {
    page.click("//a[text()='Customize this design']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function clickNext() {
  console.log('Starting clickNext...');

  group("Click Next", () => {
    page.click("//button[text()='Next']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function continueWithoutBack() {
  console.log('Starting continueWithoutBack...');

  group("Click Continue Without Back", () => {
    page.click("//button[text()='Continue without back']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function customerReviewed() {
  console.log('Starting customerReviewed...');

  page.click("//input[@value='customerReviewed']");

  sleep(5);

  group("Click Customer Reviewed", () => {
    page.click("//button[text()='Continue']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function addToCart() {
  console.log('Starting addToCart...');

  group("Click Add to Cart", () => {
    page.click("//button[text()='Add to cart']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function continuePastRecommendations() {
  console.log('Starting continuePastRecommendations...');

  group("Click Continue (Recommendations)", () => {
    page.waitForSelector("//a[text()='Continue']");
    page.click("//a[text()='Continue']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function continueToCart() {
  console.log('Starting continueToCart...');

  group("Click Continue to Cart", () => {
    page.click("//a[text()='Continue to cart']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

function goToCheckout() {
  console.log('Starting goToCheckout...');

  group("Click Checkout", () => {
    page.click("//a[text()='Checkout']");
  });

  sleep(randomIntBetween(pauseMin, pauseMax));
}

Running XK6_BROWSER_LOG=info XK6_HEADLESS=1 xk6 run -q -o json=vistaprint.json vistaprint.js, and inspecting the generated vistaprint.json file, shows 4 occurrences:

{"type":"Point","data":{"time":"2022-06-07T17:58:37.852273965+02:00","value":0.287,"tags":{"group":"::Click Next","scenario":"default","url":""}},"metric":"browser_dom_content_loaded"}
{"type":"Point","data":{"time":"2022-06-07T17:58:37.857086815+02:00","value":0.243,"tags":{"scenario":"default","group":"::Click Next","url":""}},"metric":"browser_dom_content_loaded"}
{"type":"Point","data":{"time":"2022-06-07T17:58:40.71552549+02:00","value":0.294,"tags":{"group":"::Click Next","scenario":"default","url":""}},"metric":"browser_dom_content_loaded"}
{"type":"Point","data":{"time":"2022-06-07T17:58:40.72405662+02:00","value":0.249,"tags":{"group":"::Click Next","scenario":"default","url":""}},"metric":"browser_dom_content_loaded"}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions