我怎样才能 运行 selenium C# 测试用例一个一个地排序?
How i can run selenium C# test cases in order one by one?
我已经在 C# 中使用 selenium web 驱动程序编写了几个测试用例。
我已按顺序使用 ORDER 属性 运行 测试用例。按顺序是运行。但是测试不会等待先前的测试完成。
我也用过WebDriverWait。但它不会等待。
参考Link:https://github.com/nunit/docs/wiki/Order-Attribute
请找到以下代码片段:
[Test, Order(1)]
public void OpenUserPage()
{
try
{
var wait = new WebDriverWait(_webDriver, new TimeSpan(2000));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("NavigationMenu")));
var userPageEle = _webDriver.FindElement(By.ClassName("icon-Users"));
userPageEle.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "OpenUserPage()");
}
}
[Test, Order(2)]
public void AddUser()
{
try
{
var waitForAddUser= new WebDriverWait(_webDriver, new TimeSpan(5000));
waitForAddUser.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("[ng-click*=AddUserBtnClick]")));
var addUser = _webDriver.FindElement(By.CssSelector("[ng-click*=AddUserBtnClick]"));
addUser.Click();
var element = _webDriver.FindElement(By.XPath("//input[@id='Role_hidden']"));
var permissionSet = _webDriver.FindElement(By.XPath("//input[@id='RolePermissionSet_hidden']"));
var FirstName = _webDriver.FindElement(By.Name("FirstName"));
FirstName.SendKeys("Sangeetha");
var LastName = _webDriver.FindElement(By.Name("Last Name"));
LastName.SendKeys("Periyaiah");
var UserName = _webDriver.FindElement(By.Name("UserName"));
UserName.SendKeys("SangeetheP");
var Password = _webDriver.FindElement(By.Name("Password"));
Password.SendKeys("Sync@123");
var Email = _webDriver.FindElement(By.Name("Email"));
Email.SendKeys("sangee900@gmail.com");
var RoleList = _webDriver.FindElement(By.Name("RoleList"));
element.SendKeys("SuperAdmin");
var RolePermissionList = _webDriver.FindElement(By.Name("RolePermissionList"));
permissionSet.SendKeys("SuperAdmin");
var MobileNumber = _webDriver.FindElement(By.Name("MobileNumber"));
MobileNumber.SendKeys("8220867882");
var AreaCode = _webDriver.FindElement(By.Name("AreaCode"));
AreaCode.SendKeys("600002");
var Address = _webDriver.FindElement(By.Name("Address"));
Address.SendKeys("3/761, Ab Block");
var submit = _webDriver.FindElement(By.CssSelector("[ng-click*=AddUpdateUser]"));
submit.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "AddUser()");
}
}
[Test, Order(3)]
public void ApplyFilter()
{
try
{
var waitForSearch = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitForSearch.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector(".form-control.ng-pristine.ng-valid")));
var searchUser = _webDriver.FindElement(By.CssSelector(".form-control.ng-pristine.ng-valid"));
searchUser.SendKeys("as");
var waitFilter = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitFilter.Until(ExpectedConditions.ElementToBeClickable((By.CssSelector("[ng-click*=filterUserBtnClick]"))));
var applyUserFilter = _webDriver.FindElement(By.CssSelector("[ng-click*=filterUserBtnClick]"));
applyUserFilter.Click();
var waitResetFilter = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitResetFilter.Until(ExpectedConditions.ElementToBeClickable((By.CssSelector("[ng-click*=resetFilter]"))));
var resetFilter = _webDriver.FindElement(By.CssSelector("[ng-click*=resetFilter]"));
resetFilter.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "ApplyFilter()");
}
}
请分享任何其他解决方案。
提前致谢
由于您没有提到测试用例的确切结果,但在通过代码后我会建议两种解决方法。
如果 webdriverwait 代码行抛出一些异常并且它不起作用那么你可以参考下面的代码
var waitForAddUser= new WebDriverWait(_webDriver, new TimeSpan(5000));
waitForAddUser.IgnoreExceptionTypes(typeof(NoSuchElementException),
typeof(ElementNotVisibleException));
waitForAddUser.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("[ng-
click*=AddUserBtnClick]")));
使用[Setup()]CommonWait() { Thread.sleep(5000)); }
我找到了我的解决方案。
Selenium 网络驱动程序提供了一个回调,试图在给定的 mintues/seconds/hours 中找到目标元素。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
Func<IWebDriver, bool> waitForElement = new Func<IWebDriver, bool>((IWebDriver Web) =>
{
Console.WriteLine(Web.FindElement(By.Id("target")).GetAttribute("innerHTML"));
return true;
});
wait.Until(waitForElement);
参考资料Link:
https://www.toolsqa.com/selenium-webdriver/c-sharp/advance-explicit-webdriver-waits-in-c/
我已经在 C# 中使用 selenium web 驱动程序编写了几个测试用例。 我已按顺序使用 ORDER 属性 运行 测试用例。按顺序是运行。但是测试不会等待先前的测试完成。
我也用过WebDriverWait。但它不会等待。
参考Link:https://github.com/nunit/docs/wiki/Order-Attribute
请找到以下代码片段:
[Test, Order(1)]
public void OpenUserPage()
{
try
{
var wait = new WebDriverWait(_webDriver, new TimeSpan(2000));
wait.Until(ExpectedConditions.ElementToBeClickable(By.Id("NavigationMenu")));
var userPageEle = _webDriver.FindElement(By.ClassName("icon-Users"));
userPageEle.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "OpenUserPage()");
}
}
[Test, Order(2)]
public void AddUser()
{
try
{
var waitForAddUser= new WebDriverWait(_webDriver, new TimeSpan(5000));
waitForAddUser.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("[ng-click*=AddUserBtnClick]")));
var addUser = _webDriver.FindElement(By.CssSelector("[ng-click*=AddUserBtnClick]"));
addUser.Click();
var element = _webDriver.FindElement(By.XPath("//input[@id='Role_hidden']"));
var permissionSet = _webDriver.FindElement(By.XPath("//input[@id='RolePermissionSet_hidden']"));
var FirstName = _webDriver.FindElement(By.Name("FirstName"));
FirstName.SendKeys("Sangeetha");
var LastName = _webDriver.FindElement(By.Name("Last Name"));
LastName.SendKeys("Periyaiah");
var UserName = _webDriver.FindElement(By.Name("UserName"));
UserName.SendKeys("SangeetheP");
var Password = _webDriver.FindElement(By.Name("Password"));
Password.SendKeys("Sync@123");
var Email = _webDriver.FindElement(By.Name("Email"));
Email.SendKeys("sangee900@gmail.com");
var RoleList = _webDriver.FindElement(By.Name("RoleList"));
element.SendKeys("SuperAdmin");
var RolePermissionList = _webDriver.FindElement(By.Name("RolePermissionList"));
permissionSet.SendKeys("SuperAdmin");
var MobileNumber = _webDriver.FindElement(By.Name("MobileNumber"));
MobileNumber.SendKeys("8220867882");
var AreaCode = _webDriver.FindElement(By.Name("AreaCode"));
AreaCode.SendKeys("600002");
var Address = _webDriver.FindElement(By.Name("Address"));
Address.SendKeys("3/761, Ab Block");
var submit = _webDriver.FindElement(By.CssSelector("[ng-click*=AddUpdateUser]"));
submit.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "AddUser()");
}
}
[Test, Order(3)]
public void ApplyFilter()
{
try
{
var waitForSearch = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitForSearch.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector(".form-control.ng-pristine.ng-valid")));
var searchUser = _webDriver.FindElement(By.CssSelector(".form-control.ng-pristine.ng-valid"));
searchUser.SendKeys("as");
var waitFilter = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitFilter.Until(ExpectedConditions.ElementToBeClickable((By.CssSelector("[ng-click*=filterUserBtnClick]"))));
var applyUserFilter = _webDriver.FindElement(By.CssSelector("[ng-click*=filterUserBtnClick]"));
applyUserFilter.Click();
var waitResetFilter = new WebDriverWait(_webDriver, new TimeSpan(55000));
waitResetFilter.Until(ExpectedConditions.ElementToBeClickable((By.CssSelector("[ng-click*=resetFilter]"))));
var resetFilter = _webDriver.FindElement(By.CssSelector("[ng-click*=resetFilter]"));
resetFilter.Click();
}
catch (Exception e)
{
SendMail.SendErrorEmail(e.StackTrace, "ApplyFilter()");
}
}
请分享任何其他解决方案。
提前致谢
由于您没有提到测试用例的确切结果,但在通过代码后我会建议两种解决方法。
如果 webdriverwait 代码行抛出一些异常并且它不起作用那么你可以参考下面的代码
var waitForAddUser= new WebDriverWait(_webDriver, new TimeSpan(5000)); waitForAddUser.IgnoreExceptionTypes(typeof(NoSuchElementException), typeof(ElementNotVisibleException)); waitForAddUser.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("[ng- click*=AddUserBtnClick]")));
使用[Setup()]CommonWait() { Thread.sleep(5000)); }
我找到了我的解决方案。
Selenium 网络驱动程序提供了一个回调,试图在给定的 mintues/seconds/hours 中找到目标元素。
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromMinutes(1));
Func<IWebDriver, bool> waitForElement = new Func<IWebDriver, bool>((IWebDriver Web) =>
{
Console.WriteLine(Web.FindElement(By.Id("target")).GetAttribute("innerHTML"));
return true;
});
wait.Until(waitForElement);
参考资料Link: https://www.toolsqa.com/selenium-webdriver/c-sharp/advance-explicit-webdriver-waits-in-c/