【问题标题】:How to accept insecure certificates in Chrome using Selenium-Webdriver for JavaScript?如何使用 Selenium-Webdriver for JavaScript 在 Chrome 中接受不安全的证书?
【发布时间】:2020-01-28 09:28:49
【问题描述】:

我使用 Selenium-IDE 生成了测试脚本。它是 Javascript-Mocha 类型的。我有一个准备好在本地测试它的环境。 所以,我正在访问一个存在不安全证书问题的远程 URL。

我需要修改生成的 TestScript for chrome 功能以接受不安全的证书。 我找不到任何有关 JavaScript 的官方文档,也找不到任何好的博客或 StackOverflow 答案。

这是生成的测试脚本:

// 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()
  })
})

我尝试通过以下方式进行修改(注释行是我修改后的代码):

// 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()
  })
})

但我收到以下错误:

如何使用 Javascript 为 selenium-webdriver 添加接受不安全的 ssl 证书 chrome 功能?任何指向使用 selenium-webdriver 的 Javascript 功能的官方文档的链接也会非常有帮助。

谢谢

更新: 按照@balint 的建议,我更新了初始化构建器的方式,如下所示:

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

关键部分是setAcceptInsecureCerts,这是我在source code中找到的一个方法。尽管如此,测试仍然无法接受不安全的证书并转到网站。

【问题讨论】:

  • 我认为这回答了你的问题:stackoverflow.com/questions/24507078/…
  • @balint 谢谢,我实际上已经看到了这个答案。我需要与该 Python 代码等效的 JavaScript。而且也没有我可以参考的官方 JavaScript 文档。
  • 供我自己参考,使用 JS for selenium 的文档:stackoverflow.com/questions/30323166/…
  • 但它明确指出,您必须向构建器添加一些参数才能使其工作。您可以尝试为 headless chrome 实例注入类似参数的命令,但 Selenium 构建器具有 setChromeOptions(),并且选项具有 setAcceptInsecureCerts() 函数:selenium.dev/selenium/docs/api/javascript/module/…
  • @balint 嗨,请看我的更新。

标签: javascript asynchronous selenium-webdriver selenium-chromedriver selenium-ide


【解决方案1】:

试试这个它对我有用。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2016-06-05
    • 2016-10-18
    • 2017-01-11
    • 1970-01-01
    • 2023-03-20
    • 2013-02-04
    相关资源
    最近更新 更多