text: (async function(testRunner) {
    var {page, session, dp} = await testRunner.startURL('resources/css-get-background-colors.html', 'Test css.getBackgroundColors method');
  
    var CSSHelper = await testRunner.loadScript('../resources/css-helper.js');
    var cssHelper = new CSSHelper(testRunner, dp);
  
    await dp.DOM.enable();
    await dp.CSS.enable();
  
    var documentNodeId = await cssHelper.requestDocumentNodeId();
  
    async function testGetBgColors(querySelector) {
      var nodeId = await cssHelper.requestNodeId(documentNodeId, querySelector);
      var response = await dp.CSS.getBackgroundColors({nodeId});
      testRunner.log(JSON.stringify(response.result));
    }
  
    testRunner.runTestSuite([
      async function testNoText() {
        testRunner.log('No text (and not a positioned element): should be undefined');
        await testGetBgColors('.noText p');
      },
      async function testNoBgColor() {
        testRunner.log('No background color: should be white');
        await testGetBgColors('.noBgColor p');
      },
      async function testOpaqueBgColor() {
        testRunner.log('Opaque background color: should be red');
        await testGetBgColors('.opaqueBgColor p');
      },
      async function testLayeredOpaqueBgColors() {
        testRunner.log('Opaque background color in front of another opaque background color: should be blue');
        await testGetBgColors('.layeredOpaqueBgColors p');
      },
      async function testOneSemitransparentBgColor() {
        testRunner.log('Semi-transparent background color: should be light red');
        await testGetBgColors('.semitransparentBgColor p');
      },
      async function testTwoSemitransparentBgColors() {
        testRunner.log('Two layered semi-transparent background colors: should be medium red');
        await testGetBgColors('.twoSemitransparentBgColors p');
      },
      async function testOpaqueGradientBackground() {
        testRunner.log('Opaque gradient: should be red and black');
        await testGetBgColors('.opaqueGradientBg p');
      },
      async function testOpaqueGradientBackgroundBehindScrim() {
        testRunner.log('Opaque gradient behind semi-transparent color: should be light red and 50% grey');
        await testGetBgColors('.opaqueGradientBehindScrim p');
      },
      async function testOpaqueGradientBackgroundWithColorBackground() {
        testRunner.log('Opaque gradient and solid color background on same element: should be red and black');
        await testGetBgColors('.opaqueGradientAndColorBg p');
      },
      async function testPartiallyTransparentGradientBackground() {
        testRunner.log('Semi-transparent gradient: should be light red and 50% grey');
        await testGetBgColors('.semitransparentGradientBg p');
      },
      async function testPartiallyTransparentGradientAndColorBackground() {
        testRunner.log('Semi-transparent gradient and solid color on same element: should be dark red and 50% grey');
        await testGetBgColors('.semitransparentGradientAndColorBg p');
      },
      async function testTwoPartiallyTransparentGradientBackgrounds() {
        testRunner.log('Layered semi-transparent gradients: should be undefined');
        await testGetBgColors('.twoSemitransparentGradientBgs p');
      },
      async function testPartiallyOverlappingBackground() {
        testRunner.log('Partially overlapping background: should be undefined');
        await testGetBgColors('.partiallyOverlappingBackground p');
      },
      async function smallerBackground() {
        testRunner.log('Background smaller than text: should be undefined');
        await testGetBgColors('.smallerBackground p');
      },
      async function testObscuredPartiallyOverlappingBackground() {
        testRunner.log('Red background obscuring partially overlapping blue background: should be red only');
        await testGetBgColors('.obscuredPartiallyOverlappingBackground p');
      },
      async function testBackgroundImage() {
        testRunner.log('Background image: should be undefined');
        await testGetBgColors('.backgroundImage p');
      },
      async function testBackgroundImageAndBgColor() {
        testRunner.log('Background image with background color: should be undefined');
        await testGetBgColors('.backgroundImageAndBgColor p');
      },
  
      async function testBackgroundImageBehindScrim() {
        testRunner.log('Background image behind scrim: should be semi-transparent white');
        await testGetBgColors('.backgroundImageBehindScrim p');
      },
      async function testForegroundImage() {
        testRunner.log('Image behind text: should be undefined');
        await testGetBgColors('.foregroundImage p');
      },
      async function testForegroundImageBehindScrim() {
        testRunner.log('Image behind scrim: should be semi-transparent white');
        await testGetBgColors('.foregroundImageBehindScrim p');
      },
      async function testForegroundCanvas() {
        testRunner.log('Canvas behind text: should be undefined');
        await testGetBgColors('.canvas p');
      },
      async function testForegroundEmbed() {
        testRunner.log('Embed behind text: should be undefined');
        await testGetBgColors('.embed p');
      },
      async function testForegroundObject() {
        testRunner.log('Object behind text: should be undefined');
        await testGetBgColors('.object p');
      },
      async function testForegroundPicture() {
        testRunner.log('Picture behind text: should be undefined');
        await testGetBgColors('.picture p');
      },
      async function testForegroundSVG() {
        testRunner.log('SVG behind text: should be undefined');
        await testGetBgColors('.svg p');
      },
      async function testForegroundVideo() {
        testRunner.log('Video behind text: should be undefined');
        await testGetBgColors('.video p');
      },
      async function testShadowDOM() {
        testRunner.log('Background color in Shadow DOM: should be blue');
        await testGetBgColors('.shadowDOM > .shadowHost p');
      },
    ]);
  });
  