0

I have generated test script using Selenium-IDE. It is of type Javascript-Mocha. I have an environment ready to test it locally. So, I am accessing a remote url that has insecure certificate issue.

I need to modify the generated TestScript for chrome capability to accept insecure certificate. I couldn't find any official documentation for JavaScript nor any good blog or StackOverflow answer.

Here's the generated test script:

// Generated by Selenium IDE

const {
  Builder,
  By,
  Key,
  until
} = require('selenium-webdriver')
const assert = require('assert')

describe('work', function() {
  this.timeout(30000)
  let driver
  let vars


  beforeEach(async function() {
    driver = await new Builder().forBrowser('chrome').build()
    vars = {}
  })

  afterEach(async function() {
    driver = await new Builder().forBrowser('chrome').build()
    await driver.quit();
  })
  it('work', async function() {
    await driver.get("https://kwras.eu.company.com:10016/front/v9/signin")
    await driver.manage().window().setRect(704, 584)
    await driver.findElement(By.id("prod-signin-basic-signin-form-username")).sendKeys("srishti")
    await driver.findElement(By.id("prod-signin-basic-signin-form-password")).sendKeys("srpass")
    await driver.findElement(By.id("ui-id-1")).click()
    await driver.findElement(By.css(".icon-ham-menu")).click() {
      const element = await driver.findElement(By.css(".icon-ham-menu"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-17 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-17 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)") {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-34 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-34 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)") {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-49 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-49 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.id("ui-id-55")).click() {
      const element = await driver.findElement(By.id("ui-id-55"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)")
    await driver.findElement(By.css("#searchData\\3A_hdrCol0_-2063926153_2 > #dottedMenu .oj-button-label > .demo-icon")).click() {
      const element = await driver.findElement(By.css("#searchData\\3A_hdrCol0_-2063926153_2 > #dottedMenu .oj-button-label > .demo-icon"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-63 > span")).click()
    await driver.findElement(By.css("#oj-collapsible-Identification-header > .font16")).click()
    await driver.findElement(By.css("#oj-collapsible-Brand-header > .font16")).click()
    await driver.findElement(By.css("#oj-collapsible-Dates-header > .oj-component-icon")).click()
  })
})

I tried to modify in the following way (commented lines are my modified code):

// Generated by Selenium IDE
//var webdriver = require("selenium-webdriver")
const {
  Builder,
  By,
  Key,
  until
} = require('selenium-webdriver')
const assert = require('assert')

describe('work', function() {
  this.timeout(30000)
  let driver
  let vars
  //var cbtHub = "http://localhost:4444/wd/hub  ";
  //var caps = {
  //  browserName: 'Chrome',
  //  acceptSslCerts: true,

  //};

  beforeEach(async function() {
    //try {
    //  driver = new webdriver.Builder()
    //    .usingServer(cbtHub)
    //    .withCapabilities(caps)
    //    .build();
    //} catch (err) {
    //  console.log(err);
    //  handleFailure(err, driver)
    //}
    driver = await new Builder().forBrowser('chrome').build()
    vars = {}

  })
  afterEach(async function() {
    driver = await new Builder().forBrowser('chrome').build()
    await driver.quit();
  })
  it('work', async function() {
    await driver.get("https://kwras.eu.company.com:10016/front/v9/signin")
    await driver.manage().window().setRect(704, 584)
    await driver.findElement(By.id("prod-signin-basic-signin-form-username")).sendKeys("srishti")
    await driver.findElement(By.id("prod-signin-basic-signin-form-password")).sendKeys("srpass")
    await driver.findElement(By.id("ui-id-1")).click()
    await driver.findElement(By.css(".icon-ham-menu")).click() {
      const element = await driver.findElement(By.css(".icon-ham-menu"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-17 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-17 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)") {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-34 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-34 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)") {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-49 > .oj-navigationlist-item-label")).click() {
      const element = await driver.findElement(By.css("#ui-id-49 > .oj-navigationlist-item-label"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.id("ui-id-55")).click() {
      const element = await driver.findElement(By.id("ui-id-55"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    }
    await driver.executeScript("window.scrollTo(0,0)")
    await driver.findElement(By.css("#searchData\\3A_hdrCol0_-2063926153_2 > #dottedMenu .oj-button-label > .demo-icon")).click() {
      const element = await driver.findElement(By.css("#searchData\\3A_hdrCol0_-2063926153_2 > #dottedMenu .oj-button-label > .demo-icon"))
      await driver.actions({
        bridge: true
      }).moveToElement(element).perform()
    } {
      const element = await driver.findElement(By.CSS_SELECTOR, "body")
      await driver.actions({
        bridge: true
      }).moveToElement(element, 0, 0).perform()
    }
    await driver.findElement(By.css("#ui-id-63 > span")).click()
    await driver.findElement(By.css("#oj-collapsible-Identification-header > .font16")).click()
    await driver.findElement(By.css("#oj-collapsible-Brand-header > .font16")).click()
    await driver.findElement(By.css("#oj-collapsible-Dates-header > .oj-component-icon")).click()
  })
})

But I am getting the following error: enter image description here

How do I add accept insecure ssl certificate chrome capability using Javascript for selenium-webdriver? Any link to the official documentation for Javascript capability using selenium-webdriver, would also be very helpful.

Thanks

UPDATE: Following @balint's suggestion, I have updated the way I'm initializing the builder, like this:

var chromeCapabilities = Capabilities.chrome();
chromeCapabilities. setAcceptInsecureCerts(true);
var driver = new Builder().withCapabilities(chromeCapabilities).build();

The key part is setAcceptInsecureCerts, which is a method I found in the source code. Inspite of this the test is still not able to accept the insecure certificate and move on to the website.

Srishti Sinha
  • 618
  • 1
  • 11
  • 23
  • I think this answers your question: https://stackoverflow.com/questions/24507078/how-to-deal-with-certificates-using-selenium – balint Jan 28 '20 at 09:32
  • @balint Thanks, I have actually seen this answer. I am in need of a JavaScript equivalent of that Python code. And also there is no official JavaScript documentation as well that I can consult. – Srishti Sinha Jan 28 '20 at 09:37
  • For my own reference, documentation using JS for selenium: https://stackoverflow.com/questions/30323166/where-is-the-documentation-of-selenium-webdriver-for-nodejs#_=_ – Srishti Sinha Jan 28 '20 at 10:33
  • 1
    but it clearly states, that you have to add some parameters to the builder to make it work. You can try to inject command like parameters for the headless chrome instance, but Selenium builder has setChromeOptions(), and options have a setAcceptInsecureCerts() function: https://selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/lib/capabilities_exports_Capabilities.html – balint Jan 28 '20 at 10:37
  • @balint Hi, pls see my update. – Srishti Sinha Jan 28 '20 at 12:05

1 Answers1

2

try this it worked for me.

var chromeCapabilities = Capabilities.chrome();
chromeCapabilities.set("acceptInsecureCerts", true);
var driver = new Builder().withCapabilities(chromeCapabilities).build();
irlatech
  • 67
  • 6