当前位置: 首页 > 知识库问答 >
问题:

远程Selenium 2 WebDrive实例如何接受不受信任的证书?

于飞飙
2023-03-14

我试图用JUnit实现一些Selenium2WebDriver测试。有关硒的文件。org和web让我感到困惑,因为它似乎在seleniumrc和Webdriver之间来回跳跃。另外,我的Java不是很强。几年前我上过几门课,但没怎么用。我想让JUnit测试在无头CI服务器上运行,并让Firefox通过使用Webdriver在远程客户端系统上运行。

根据我收集的信息,我可以使用以下代码在本地系统上打开一个由Webdriver控制的Firefox实例。我正在测试的网站有一个不受信任的SSL/TLS证书,所以我需要告诉Firefox驱动程序接受不受信任的证书。这在本地非常有效:

FirefoxProfile profile = new FirefoxProfile();
profile.setAcceptUntrustedCertificates(true);  // NOTE: this is the default behavior
RemoteWebDriver driver = new FirefoxDriver(profile);
Selenium selenium = new WebDriverBackedSelenium(driver, baseurl);

但是我不知道如何在远程系统上使用网络驱动程序做到这一点。这两种方法似乎完全不相容。上面的代码不适合以任何方式进入下面的代码,我一直在使用远程使用Web驱动程序:

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl);
selenium.start();

现在,我已经花了很多时间在远程测试系统上使用自定义Firefox配置文件。它在2012年夏天工作,但在最近的操作系统和浏览器更新后,它停止了工作。创建Firefox驱动程序配置文件并调用setAcceptUn信托证书(true)似乎要好得多。是否可以使用Web驱动程序在远程系统的浏览器中运行测试,并且让浏览器忽略不受信任的SSL/TLS证书?

共有3个答案

章心水
2023-03-14

当我问这个问题时,我不理解Selenium对象和WebDriver对象之间的区别。尽管我特别想了解Selenium 2的“WebDriver”特性,但我愚蠢地认为我可以用Selenium 2对象编写一个“Selenium 2 WebDriver”项目。对于有使用这些工具经验的人来说,这听起来很明显,但在阅读了“Selenium 2”的书籍和项目文档之后,我仍然不清楚这种区别。

因此,我编写了Java代码来实例化一个Selenium对象来检查网页,并试图将Selenium对象传递给WebDriver对象,希望测试能够在远程服务器上运行。

现在似乎更清楚了:Selenium和WebDriver项目合并成了一个新的伞式项目,名为(令人困惑的)Selenium 2.0,但它们是Selenium 2中不同的独立工具。如果我想使用WebDriver API,似乎必须将任何现有的Selenium对象转换为WebDriver对象。这两个工具之间似乎没有有用的相互作用。

例如,在我的项目中,我有以下代码。它在本地桌面系统的web浏览器上运行良好:

Selenium selenium = new DefaultSelenium(host, port, browser, baseurl);

selenium.get(urlPath);

selenium.type(username_field, username);
selenium.type(password_field, password);
selenium.click(login_button);

但我希望能够在无头持续集成服务器上运行该测试,而不是在我的桌面系统上。我已将代码转换为使用WebDriver对象而不是Selenium对象。现在,它在连接到Selenium Grid 2服务器的远程系统上运行:

WebDriver driver = new RemoteWebDriver(new URL("http://10.0.0.29:4444/wd/hub"), capability);

driver.get(urlPath);

driver.findElement(By.name(username_field)).sendKeys(username);
driver.findElement(By.name(password_field)).sendKeys(password);
driver.findElement(By.className(login_button)).submit();

我希望其他想学习如何在Selenium 2中使用WebDriver的人不要像我读Selenium对象那样浪费时间,因为我认为Selenium对象是WebDriver的一部分。我目前的[n00b]建议是忽略任何提及Selenium对象的内容,只关注尽可能多地了解WebDriver对象。SeleniumHQ的WebDriver文档是一个很好的起点。组织:

  • http://seleniumhq.org/docs/03_webdriver.jsp#webdriver-and-the-selenium-server

正如A.J.在回答中所建议的那样,还可以查看Selenium网格文档:

  • http://code.google.com/p/selenium/wiki/Grid2

和PS:默认情况下,远程Selenium 2 Webdriver实例自动接受不受信任的SSL/TLS证书。不需要代码。

桑坚成
2023-03-14

首先,如果您只是为了配置文件而使用webdriver支持的selenium,我建议您坚持使用webdriver。您可以将要在本地计算机上使用的配置文件定义为

   File file = new File("firebug-1.8.1.xpi");
   FirefoxProfile firefoxProfile = new FirefoxProfile();
   firefoxProfile.addExtension(file);
   firefoxProfile.setPreference("extensions.firebug.currentVersion", "1.8.1"); 
   WebDriver driver = new FirefoxDriver(firefoxProfile);

回答您的问题:我将引用Simon Stewart的解决方案:

 FirefoxProfile profile = new FirefoxProfile(); 
 profile.setAcceptUntrustedCertificates(true); 
 DesiredCapabilities caps = DesiredCapabilities.firefox(); 
 caps.setCapability(FirefoxDriver.PROFILE, profile);

使用此配置文件创建远程驱动程序。

现在,如果这不起作用,我们可以编写一个bug(或者至少是一个特性请求)。

后期编辑:我不能真正测试这个解决方案,因为我没有一个证书问题网站随时可用。因此,在某种程度上,我会期待您的反馈,以了解真实情况……:)

易波涛
2023-03-14

如问题中所述,您不需要为显式接受不受信任的证书设置任何属性。默认情况下,WebDrier接受不受信任的证书。你应该直接使用远程web驱动程序,而不是使用webdriverback selenium:

Webdriver wd = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), DesiredCapabilities.firefox());

这里的http://localhost:4444/wd/hub是执行测试时应该发送到的中心的URL。当您开始测试时,hub将查找已经注册了Firefox功能的远程节点。

就我个人而言,我建议http://code.google.com/p/selenium/wiki/Grid2阅读留档,而不是seleniumhq.org.据我所知,selenium团队正试图更新seleniumhq留档。你也可以为它做出贡献:)

 类似资料:
  • 为此,我使用以下命令将。cer文件导入到jks文件中。(密码和密码一样,提示要求接受证书,我给y,然后说证书加到keystore了) keytool-importcert-file xyz.cer-keystore test.jks-alias“testsp” 然后我使用这个jks文件创建凭据,如下所示。 谁能指导我解决这个问题吗?

  • 我有个小问题。我正在用selenium以特定的配置文件打开firefox浏览器,一个flash应用程序出现了。在这个应用程序中,我需要单击一些东西,所以我使用sikuli。问题是,当使用sikuli单击按钮时,我的应用程序会在匿名配置文件中打开浏览器,从而显示“不受信任的SSL证书”。 有没有办法为火狐的匿名配置文件设置AcceptUnTrust d证书? 我想提到的是,我的java代码中已经有s

  • 我开发了一个Web应用程序并将我的证书用于SSL。我不需要CA证书,因为客户端正在连接到内部网中的服务器。所以客户端每次都会收到不受信任的连接错误。你知道我们如何在每个浏览器中摆脱这个错误吗?我试图将我生成的证书添加到浏览器,但它不起作用,也无法识别我的证书类型。 谢谢 --法力

  • 我刚刚在Google Cloud上的VM上设置了我的Neo4j服务器,我使用的是企业版4.1.1,并且我已经完成了David Allen关于如何使用LetsEncrypt获得证书的精彩帖子(在这里)。 这一切都工作得很好,我现在有了一个完全安全的Neo4j服务器,我可以通过浏览器()使用我的主机名访问它。但是,我现在在让我的应用程序使用javascript驱动程序连接到服务器时遇到了问题。 我不断

  • 我已经通过复制我计划连接的Idp的509条目生成了testIdp.cer文件。然后,我通过执行以下命令创建了JKS文件 执行时,它要求输入我已提供密码的密码。对于问题“信任此证书?[no]:“,我给出了”y“作为输入。消息显示为“证书已添加到密钥库”。 然后,我在securityContext.xml中配置了以下详细信息: 但是当我运行应用程序时,在服务器启动和加载应用程序的主页时,我得到了以下两

  • 我有一个关于使用无效证书通过https测试网站的问题。你能帮忙吗?我正在临时服务器上测试一个网站。它需要https,并且使用了无效的证书,该证书属于生产服务器。因此,当我访问该网站时,FireFox会显示“此连接不受信任页面”。我已经设法让firefox跳过页面;但是,如果我不使用Selenium(Python绑定)运行它,它将再次显示“Untrusted”页面。所以,我做了更多的研究,发现: h