1

我已经使用 Selenium 和 FireFox 构建了一些测试。为此,我使用了 FirefoxDriver:

private FirefoxDriver driver = new FirefoxDriver():

这很好用,但现在我希望能够根据用户的选择切换浏览器。我曾希望使用 WebDriver 作为类型,然后使用开关来确定使用哪个浏览器。

不幸的是,WebDriver 给出了错误:“无法解析符号“WebDriver”。我发现的几乎每个示例都使用了 WebDriver 类型规范。

我在我的项目中引用了 WebDriver.dll。并且 Chrome、Firefox 和 IE 驱动程序被识别。只是通用驱动程序不是。谁能告诉我我能做些什么来完成这项工作?

4

2 回答 2

0

各种驱动程序都实现了一个名为IWebDriver. 但是,您正在使用诸如FindElementByClassName... 之类的方法,该方法位于RemoteWebDriver. 尽管我建议您放弃它并使用基本.FindElement类型并传入By您需要的选择器 ( ) 类型,但有一种解决方法:

你需要一个usingforOpenQA.Selenium.Remote

private RemoteWebDriver driver;

然后你可以这样做:

driver = new FirefoxDriver();

或者...

driver = new InternetExplorerDriver();

您仍然可以访问您的底层FindElementBy...方法。

我还要说您根本不需要 ThoughtWorks 或 WebDriverBackedSelenium 库。删除它们。

于 2013-08-08T16:15:38.877 回答
0

对于 Java,最好的方法是使用WebDriver接口(甚至RemoteWebDriver类)将 Web 驱动程序对象定义为泛型类型。

WebDriver driver = new XYZDriver();

其中XYZ是您需要使用的特定浏览器的名称。下图显示了WebDriver每个支持的浏览器的接口类型层次结构。

在此处输入图像描述

我不确定 OP 的“切换”浏览器是什么意思,但我认为 OP 的意思是能够在会话开始时选择不同的浏览器。尽管每个 Web 驱动程序具体化对初始化 Web 驱动程序实例有不同的要求,但有关如何执行此操作的一般概念是这样的:

public WebDriver initializeBrowser(string browserName) throws Exception {
    WebDriver driver = null;
    switch (browser.toLowerCase()) {
        case "chrome":
          driver = createChromeDriver();
          break;
        case "firefox":
          driver = createFirefoxDriver();
          break;
        ...
        default:
          throw new Exception("Unsupported browser: " + browserName);
    }
    return driver;
}

每个都createXXXDriver应该封装创建驱动程序实例的过程,例如设置驱动程序位置的系统属性,设置所需的任何驱动程序选项(即设置无头模式,启动最大化或最小化等),最后调用相关的构造函数。

我在以前的项目中使用了这种方法,并且工作起来非常有魅力。在我的特殊情况下,我使用 VM 参数 (-Dbrowser=xxx) 传递了浏览器名称。这样做,让我不仅可以在本地机器上使用不同的浏览器运行测试,还可以配置我的 CI/CD 环境 (Jenkins) 以使用不同的参数运行确切的作业;其中之一是我想用于特定测试运行的浏览器。

于 2021-09-17T14:49:32.843 回答