【发布时间】:2019-07-30 17:52:02
【问题描述】:
我在一个测试类中有 4 个测试,当我分别运行每个测试时,它们都通过了。但是,当我并行运行它们时,它们会失败。我相信问题在于使用相同的驱动程序实例进行测试。我已将驱动程序更改为受保护,但结果是一样的。并行测试失败。
WebDriver 类:
using OpenQA.Selenium;
namespace TestAutomationFramework.Utilities
{
public class WebDriver
{
protected IWebDriver Driver { get; set; }
}
}
TestSetup 类:
using System;
using NUnit.Framework;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
using TestAutomationFramework.Utilities;
namespace TestAutomationFramework.Tests
{
[TestFixture]
public class TestSetup : WebDriver
{
public TestSetup()
{
var options = new ChromeOptions();
Driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities(), TimeSpan.FromSeconds(10));
Driver.Manage().Window.Maximize();
}
// Test Setup, every test starts with this method
[SetUp]
public void StartTest()
{
Driver.Navigate().GoToUrl("https://google.com");
}
// Test Tear Down, every test ends with this method
[TearDown]
public void QuitTest()
{
Driver.Close();
Driver.Quit();
}
}
}
BasePage 类:
using System.Threading;
using OpenQA.Selenium;
namespace TestAutomationFramework.Pages
{
public class BasePage
{
protected IWebDriver WebDriver;
public BasePage(IWebDriver webDriver) => WebDriver = webDriver;
#region Elements
private IWebElement SearchField => WebDriver.FindElement(By.Name("q"));
private IWebElement SearchButton => WebDriver.FindElement(By.Name("btnK"));
#endregion
public void SearchFor(string searchText)
{
//Thread.Sleep(2000);
SearchField.SendKeys(searchText);
SearchButton.Click();
Thread.Sleep(5000);
}
public bool SearchResultShows(string whatShows)
{
Thread.Sleep(5000);
var element = WebDriver.FindElement(By.XPath(
"//*[@id='rhs_block']/div/div[1]/div/div[1]/div[2]/div[1]/div[2]/div[2]/div/div/div[2]/div/span"));
return element.Text.Equals(whatShows);
}
}
}
DemoTest 类
using NUnit.Framework;
using TestAutomationFramework.Pages;
namespace TestAutomationFramework.Tests
{
[TestFixture]
[Parallelizable(ParallelScope.All)]
public class DemoTest : TestSetup
{
private BasePage _basePage;
[Test]
public void TestLogin()
{
const string query = "Test automation";
_basePage = new BasePage(webDriver: Driver);
_basePage.SearchFor(query);
var shows = _basePage.SearchResultShows(whatShows: query);
Assert.IsTrue(shows);
}
[Test]
public void TestLogin2()
{
const string query = "Test automation";
_basePage = new BasePage(webDriver: Driver);
_basePage.SearchFor(query);
var shows = _basePage.SearchResultShows(whatShows: query);
Assert.IsTrue(shows);
}
[Test]
public void TestLogin3()
{
const string query = "Test automation";
_basePage = new BasePage(webDriver: Driver);
_basePage.SearchFor(query);
var shows = _basePage.SearchResultShows(whatShows: query);
Assert.IsTrue(shows);
}
[Test]
public void TestLogin4()
{
const string query = "Test automation";
_basePage = new BasePage(webDriver: Driver);
_basePage.SearchFor(query);
var shows = _basePage.SearchResultShows(whatShows: query);
Assert.IsTrue(shows);
}
}
}
问题:如何解决驱动实例,使所有测试不使用同一个驱动?
【问题讨论】: