下面是Test类代码:
[TestFixture]
public class Playground
{
public static IWebDriver d { set; get; }
[SetUp]
public void Initialize_Browser()
{
d = new ChromeDriver();
d.Manage().Window.Maximize();
d.Url = "https://the-internet.herokuapp.com/";
}
[TearDown]
public void Quit()
{
d.Quit();
}
[Test]
public void Test1()
{
POM p = new POM();
m.Iwait(15);
m.Print("You are now at " + p.main_header_txt + " page");
}
[Test]
public void Test2()
{
POM p = new POM();
p.Hover_Images();
}
以下是另一个类,该类具有包含常用代码的自定义静态方法:(用于将鼠标悬停在元素上)
public class m
{
static IWebDriver d= Playground.d;
public static void Hover(IWebElement IW)
{
Actions act = new Actions(d);
act.MoveToElement(IW).Build().Perform();
}
}
下面是另一个类,其方法在测试类中被调用。
public class POM
{
static IWebDriver d= Playground.d;
IWebElement hovers_link => d.FindElement(By.LinkText("Hovers"));
public void Hover_Images()
{
hovers_link.Click();
IList<IWebElement> user_image = d.FindElements(By.XPath("//div[@class='figure']"));
foreach (IWebElement ui in user_image)
{
m.Hover(ui);
Thread.Sleep(1000);
}
}
}
构建解决方案并运行它之后,测试1()通过,测试2()失败。
但是,如果我单独运行Test2(),则可以通过!
如果我仅使用[onetimesetup]和[onetimeteardown]而不是[setup]和[teardown],则测试通过。 在“调试模式”下,它表明执行Hovers方法时会发生异常。
我想念什么吗?请帮我。
谢谢。
答案 0 :(得分:0)
您没有显示驱动程序实例d
的定义。根据用法,我假设它被定义为测试类的成员变量。这意味着两个测试都使用d
的相同实例。
我的猜测是,您已启用测试的并行运行,并且它们正在逐步使用彼此的通用驱动程序。当您使用一次设置而不是设置时,只会创建一个驱动程序。如果这正是您要进行的测试,则可以。根据您使用驱动程序执行的操作,并行测试可能不会互相影响。
当然,另一种解决方法是将测试标记为不可并行化。
答案 1 :(得分:0)
我找到了解决方法,
我已经将Hover()方法的参数修改为 公共静态无效悬停(IWebDriver d,IWebElement IW) { 行动=新行动(d); act.MoveToElement(IW).Build()。Perform(); }
,并从类m中删除了驱动程序实例 IWebDriver d = d.Playground