【发布时间】:2019-11-15 16:22:10
【问题描述】:
我正在尝试并行化我的 Selenium 测试。我发现Selenium's IWebDriver is not thread safe。我不知道没有线程安全测试是否有严重的危险,但我想在任何情况下尝试解释任何“不良做法”。在我的代码中,我使用了以下设计。
public abstract class Parent
{
public IWebDriver driver;
public Parent(IWebDriver driver) { this.driver = driver; }
public bool ElementExists(By by) {
if (this.driver.FindElement(by) != null)
return true;
return false;
}
}
public class Child1 : Parent
{
public Child1(IWebDriver driver) : base(driver) { }
}
public class Child2 : Parent
{
public Child2(IWebDriver driver) : base(driver) { }
}
这个代码线程安全吗?
据我了解,由于我将 IWebDriver 实例传递给构造函数,因此我不必担心子类错误地使用相同的 IWebDriver。但是,仅从非线程安全代码示例来看,在抽象 Parent 类中包含 IWebDriver 字段是一个问题。
【问题讨论】:
-
只要您为每个运行的测试用例初始化和拆除
WebDriver实例,您的代码就应该是线程安全的。当对多个测试使用相同的 WebDriver 实例时会出现问题,即使没有并行也是不好的做法。 -
@Christine 明白了。是的,我正在我的每个
[TestMethod]s 中创建新的WebDriver实例
标签: c# selenium thread-safety