如何在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
}
}
在这种情况下如何实现多线程?
多线程通常是为了使用一个测试单元运行多个测试来实现的。
对于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 值启动测试项目。