【问题标题】:Selenium driver: -Dwebdriver.driver="iexplorer" invokes safariSelenium webdriver:-Webdriver.driver="iexplorer" 调用 safari
【发布时间】:2018-05-11 18:16:02
【问题描述】:

当我尝试运行我的 Serenity 测试自动化时,我调用了以下 maven 命令:

mvn clean verify -Dentry_point="**/*SmokeTestSuite.java" -Dwebdriver.driver="iexplorer" -Dwebdriver.ie.driver="<my path>\IEDriverServer.exe"

我提供了 iexplorer 作为驱动程序和 IEDriverServer.exe 的路径。我的 Internet Explorer 版本是 11.x。 运行ie驱动时报错需要添加safari.exe的路径。

以下是错误堆栈跟踪:

[pool-1-thread-1] ERROR net.thucydides.core.webdriver.WebDriverFacade - FAILED TO CREATE NEW WEBDRIVER_DRIVER INSTANCE class org.openqa.selenium.ie.InternetExplorerDriver: Could not instantiate class org.openqa.selenium.ie.InternetExplorerDriver
net.thucydides.core.webdriver.UnsupportedDriverException: Could not instantiate class org.openqa.selenium.ie.InternetExplorerDriver
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:128)
    at net.thucydides.core.webdriver.WebDriverFacade.newDriverInstance(WebDriverFacade.java:142)
    at net.thucydides.core.webdriver.WebDriverFacade.newProxyDriver(WebDriverFacade.java:133)
    at net.thucydides.core.webdriver.WebDriverFacade.getProxiedDriver(WebDriverFacade.java:103)
    at net.thucydides.core.webdriver.WebDriverFacade.getTitle(WebDriverFacade.java:213)
    at net.serenitybdd.jbehave.SerenityReporter.managedDriverIsNotAlive(SerenityReporter.java:215)
    at net.serenitybdd.jbehave.SerenityReporter.beforeScenario(SerenityReporter.java:188)
    at org.jbehave.core.reporters.DelegatingStoryReporter.beforeScenario(DelegatingStoryReporter.java:55)
    at org.jbehave.core.reporters.ConcurrentStoryReporter.beforeScenario(ConcurrentStoryReporter.java:158)
    at org.jbehave.core.embedder.PerformableTree$PerformableScenario.perform(PerformableTree.java:877)
    at org.jbehave.core.embedder.PerformableTree$PerformableStory.performScenarios(PerformableTree.java:811)
    at org.jbehave.core.embedder.PerformableTree$PerformableStory.perform(PerformableTree.java:784)
    at org.jbehave.core.embedder.PerformableTree.performCancellable(PerformableTree.java:416)
    at org.jbehave.core.embedder.PerformableTree.perform(PerformableTree.java:387)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:291)
    at org.jbehave.core.embedder.StoryManager$EnqueuedStory.call(StoryManager.java:265)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748) .                                
Caused by: java.lang.RuntimeException: Safari could not be found in the path!
Please add the directory containing ''Safari.exe'' to your PATH environment
variable, or explicitly specify a path to Safari like this:
*safari c:\blah\Safari.exe
    at org.openqa.selenium.browserlaunchers.locators.SingleBrowserLocator.findBrowserLocationOrFail(SingleBrowserLocator.java:42)
    at org.openqa.selenium.safari.SafariDriverCommandExecutor.start(SafariDriverCommandExecutor.java:100)
    at org.openqa.selenium.safari.SafariDriver.startClient(SafariDriver.java:76)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:119)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144)
    at org.openqa.selenium.safari.SafariDriver.<init>(SafariDriver.java:62)
    at org.openqa.selenium.safari.SafariDriver.<init>(SafariDriver.java:53)
    at net.thucydides.core.webdriver.strategies.InternetExplorerDriverBuilder.newInstance(InternetExplorerDriverBuilder.java:30)
    at net.thucydides.core.webdriver.WebDriverFactory.newWebdriverInstance(WebDriverFactory.java:116)
    ... 19 more

【问题讨论】:

    标签: selenium selenium-webdriver serenity-bdd selenium-iedriver iedriverserver


    【解决方案1】:

    webdriver.driver 是设置驱动程序的正确 Serenity 属性。我不确定 DebajanB 所说的“容易出错”是什么意思——通常,它可以工作,也可以不工作,如果不工作,那就是配置问题。要检查驱动程序属性是否在 Maven 中正确配置(您可能需要将其作为 surefire 或故障安全插件中的系统属性传递到您的测试中),查看它是否适用于 firefox。

    对 webdriver.gecko.driver 等的引用告诉 Serenity 在哪里可以找到特定驱动程序的二进制文件,但它们不会告诉 Serenity 使用哪个驱动程序。您可以配置多个驱动程序二进制文件,然后通过webdriver.driver 选择使用其中一个。

    Safari 不是 Serenity 的默认驱动程序,Firefox 是,所以对 Safari 的引用很奇怪。这可能是来自旧版本的缺陷/误导性错误消息 - 您使用的是最新版本的 Serenity 吗?

    【讨论】:

    • 我在故障安全插件中设置了 iexplorer 但它给出了同样的错误。现在我使用的是 serenity 版本 1.1.39,它是一个相当旧的版本,可能是您建议的误导性错误的原因。
    • 将 serenity 更新到 1.2.2 确实解决了上述问题。但是现在 Internet Explorer 不断发出消息“这是 WebDriver 服务器的初始起始页”
    【解决方案2】:

    此错误消息...

    ERROR net.thucydides.core.webdriver.WebDriverFacade - FAILED TO CREATE NEW WEBDRIVER_DRIVER INSTANCE class org.openqa.selenium.ie.InternetExplorerDriver: Could not instantiate class org.openqa.selenium.ie.InternetExplorerDriver
    net.thucydides.core.webdriver.UnsupportedDriverException: Could not instantiate class org.openqa.selenium.ie.InternetExplorerDriver
    

    ...暗示程序无法创建/生成所需的新 InternetExplorerDriver 实例。

    这个错误的主要原因是你用来执行Serenity Test Automation Suite容易出错的maven命令,如下:

    mvn clean verify -Dentry_point="**/*SmokeTestSuite.java" -Dwebdriver.driver="iexplorer" -Dwebdriver.ie.driver="<my path>\IEDriverServer.exe"
    

    最常用的WebDriver变种有:

    • -Dwebdriver.gecko.driver - 对于 geckodriver.exe
    • -Dwebdriver.chrome.driver - 对于 chromedriver.exe
    • -Dwebdriver.ie.driver - 对于 IEDriverServer.exe

    但是由于您使用了不正确的 argument 作为 -Dwebdriver.driver 以及不正确的 value 作为 iexplorer Serenity Test Automation Framework 尝试访问 Safari.exe 的默认配置。

    解决方案

    您需要删除容易出错的参数-Dwebdriver.driver="iexplorer",然后您就可以通过了。

    【讨论】:

    • 我尝试删除它,然后它默认为firefox浏览器
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多