如何在Selenium中为每个线程运行一个浏览器

本文关键字:运行 浏览器 一个 线程 Selenium | 更新日期: 2023-09-27 18:34:32

我不认为这是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
            }
        }

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

如何在Selenium中为每个线程运行一个浏览器

多线程通常是为了使用一个测试单元运行多个测试来实现的。

对于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

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

希望这有帮助。

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

private static IWebDriver webDriver;

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

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

相关文章: