我正在使用 Selenium Grid2 和 MbUnit/Gallio 在 C# 中工作。我读到可以使用数据集的组合来驱动 MbUnit v3 中的 MbUnit UsingFactories 替代方案。因此,我尝试使用 MbUnit 在多个浏览器上执行单个测试,并使用附加数据集将浏览器和数据的笛卡尔积变成测试。如果我在没有额外数据集的情况下运行代码,一切正常,测试代码将针对两个浏览器执行。
private IEnumerable<ICapabilities> ProvideCapabilities
{
get
{
yield return DesiredCapabilities.Firefox();
yield return DesiredCapabilities.Chrome();
}
}
[Test]
public void testBrowser([Factory("ProvideCapabilities")] ICapabilities browser)
{
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
browser);
driver.Navigate().GoToUrl("http://www.google.com/");
IWebElement query = driver.FindElement(By.Name("q"));
query.SendKeys("Bark");
query.Submit();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return d.Title.ToLower().StartsWith("bark"); });
System.Console.WriteLine("Page title is: " + driver.Title);
driver.Quit();
System.Console.WriteLine("end of testBrowser");
}
如果我添加数据集以使测试用例数据驱动 Selenium 超时,但操作已针对浏览器正确运行。似乎网格永远不会从节点接收结果。在 MbUnit 测试运行程序 Icarus 中,我看到四个测试已运行但超时。该代码在每次执行时都会创建一个新的 WebDriver 对象,但是 Selenium Grid2 中是否存在其他一些共享资源会阻止它工作。
private IEnumerable<ICapabilities> ProvideCapabilities
{
get
{
yield return DesiredCapabilities.Firefox();
yield return DesiredCapabilities.Chrome();
}
}
public IEnumerable<string> ProvideSearchString
{
get
{
yield return "Cheese";
yield return "Bark";
}
}
[Test]
public void testBrowser([Factory("ProvideCapabilities")] ICapabilities browser, [Factory("ProvideSearchString")] string searchString)
{
IWebDriver driver = new RemoteWebDriver(new Uri("http://127.0.0.1:4444/wd/hub"),
browser);
driver.Navigate().GoToUrl("http://www.google.com/");
IWebElement query = driver.FindElement(By.Name("q"));
query.SendKeys(searchString);
query.Submit();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return d.Title.ToLower().StartsWith(searchString); });
System.Console.WriteLine("Page title is: " + driver.Title);
driver.Quit();
System.Console.WriteLine("end of testBrowser");
}