BaseTest.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. using OpenQA.Selenium;
  7. using OpenQA.Selenium.Edge;
  8. using OpenQA.Selenium.Support.UI;
  9. namespace Admin.NET.Test;
  10. /// <summary>
  11. /// 测试基类
  12. /// </summary>
  13. public class BaseTest : IDisposable
  14. {
  15. private readonly string _baseUrl = "http://localhost:8888";
  16. protected readonly EdgeDriver Driver = new();
  17. protected BaseTest(string token = null)
  18. {
  19. var url = _baseUrl;
  20. if (!string.IsNullOrWhiteSpace(token)) url += $"/#/login?token={token}";
  21. Driver.Manage().Window.Maximize();
  22. Driver.Navigate().GoToUrl(url);
  23. // 隐式等待3秒(隐式等待是元素未被呈现出来,才会等待)
  24. Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(3);
  25. }
  26. /// <summary>
  27. /// 等待网页加载完成
  28. /// </summary>
  29. protected async Task WaitExecutorCompleteAsync()
  30. {
  31. var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
  32. wait.Until(driver => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
  33. await Task.Delay(1000);
  34. }
  35. /// <summary>
  36. /// 用户登录
  37. /// </summary>
  38. /// <param name="account"></param>
  39. /// <param name="password"></param>
  40. protected async Task Login(string account = "superAdmin.NET", string password = "Admin.NET++010101")
  41. {
  42. await GoToUrlAsync("/#/login");
  43. var inputList = Driver.FindElements(By.CssSelector("#pane-account input"));
  44. // 输入用户名
  45. var accountInput = inputList.First();
  46. accountInput.Clear();
  47. accountInput.SendKeys(account);
  48. // 输入密码
  49. var passwordInput = inputList.Skip(1).First();
  50. passwordInput.Clear();
  51. passwordInput.SendKeys(password);
  52. // 输入验证码
  53. var captchaInput = inputList.Skip(2).First();
  54. captchaInput.Clear();
  55. captchaInput.SendKeys("0");
  56. // 提交
  57. var button = Driver.FindElement(By.CssSelector("#pane-account button"));
  58. button.Click();
  59. }
  60. /// <summary>
  61. /// 打开指定页面
  62. /// </summary>
  63. /// <param name="url"></param>
  64. protected async Task GoToUrlAsync(string url)
  65. {
  66. if (url.StartsWith("http")) await Driver.Navigate().GoToUrlAsync(url);
  67. else await Driver.Navigate().GoToUrlAsync(_baseUrl + "/" + url.TrimStart('/'));
  68. await WaitExecutorCompleteAsync();
  69. }
  70. /// <summary>
  71. /// 等待用户按回车键继续
  72. /// </summary>
  73. /// <param name="text">提示词</param>
  74. protected void WaitEnter(string text = "等待用户按回车键继续...")
  75. {
  76. Console.WriteLine(text);
  77. Console.ReadLine();
  78. }
  79. public void Dispose()
  80. {
  81. Driver.Quit();
  82. Driver.Dispose();
  83. }
  84. }