0

我不认为这对 Selenium 来说是特别的,但我已经包含了该标签,因为我认为这是一个与 Selenium 测试非常相关的问题。

我有一个按原样工作的浏览器类:

 public static class Browser {
    private static IWebDriver webDriver;
    private static IWebDriver ieDriver;
    private static IWebDriver chromeDriver;

    private static BrowserType _browserType;

    public static BrowserType BrowserType {
        set {
            _browserType = value;

            switch (_browserType) {
                case BrowserType.IE:
                    if (ieDriver == null)
                    {
                        var ieOptions = new InternetExplorerOptions();
                        ieOptions.InitialBrowserUrl = "about:home";
                        ieDriver = new InternetExplorerDriver(DriverPath, ieOptions);
                    }
                    webDriver = ieDriver;
                    break;
                case BrowserType.Chrome:
                    if (chromeDriver == null)
                    {
                        chromeDriver = new ChromeDriver(DriverPath);
                    }
                    webDriver = chromeDriver;
                    break;
                default:
                    if (chromeDriver == null)
                    {
                        chromeDriver = new ChromeDriver(DriverPath);
                    }
                    webDriver = chromeDriver;
                    break;
                    break;
            }

        } get { return _browserType; }

    }

    public static void Goto(string url) {
        webDriver.Navigate().GoToUrl(url);
    }
}

问题是这些浏览器中的每一个都应该在自己的线程中运行,以便每个测试可以同时在每个浏览器上运行(将跨浏览器测试时间减少到运行单个浏览器测试所需的时间)。现在使用以下方法顺序调用测试:

public void RunTest(Func<TestSettings, TestRole, bool> testToRun)
        {
     foreach (var browserType in BrowserTypes)
            {
                  // Assert test passes in given browser
                  // browser should have its own thread
            }
        }

在这种情况下如何实现多线程?

4

2 回答 2

0

通常实现多线程以使用测试单元运行多个测试。

对于 PHP,您有 PHPUnit 和其他一些选项: http: //net.tutsplus.com/tutorials/php/parallel-testing-for-phpunit-with-paratest/

对于 Java,您可以尝试使用 JUnit 挖掘 maven-surefire-plugin。 http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html

不知道是否可以通过任何 selenium API 实现。如果您找到方法,请务必让我知道!

希望这可以帮助。

于 2013-10-09T19:19:15.290 回答
0

我看到你只有一个驱动程序:

private static IWebDriver webDriver;

当您第一次设置 BrowserType(例如作为 IE)时,您分配 webDriver(作为 IE)。然后,当您第二次设置 BrowserType(例如 Chrome)时,您重新分配 webDriver(现在是 Chrome,IE 丢失)。您永远不会以这种方式同时运行两个浏览器。

BrowserType 应该在外部设置。例如,作为测试项目的参数或来自 App.config。如果您想同时在一台机器上运行测试,请创建一个应用程序(例如控制台应用程序),它在两个不同的线程中使用不同的 BrowserType 值启动您的测试项目。

于 2013-10-21T17:24:24.507 回答