BaseTest.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. }
  24. /// <summary>
  25. /// 等待网页加载完成
  26. /// </summary>
  27. protected async Task WaitExecutorCompleteAsync()
  28. {
  29. var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
  30. wait.Until(driver => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));
  31. await Task.Delay(1000);
  32. }
  33. /// <summary>
  34. /// 用户登录
  35. /// </summary>
  36. /// <param name="account"></param>
  37. /// <param name="password"></param>
  38. protected async Task Login(string account = "superadmin", string password = "123456")
  39. {
  40. await GoToUrlAsync("/#/login");
  41. var inputList = Driver.FindElements(By.CssSelector("#pane-account input"));
  42. // 输入用户名
  43. var accountInput = inputList.First();
  44. accountInput.Clear();
  45. accountInput.SendKeys(account);
  46. // 输入密码
  47. var passwordInput = inputList.Skip(1).First();
  48. passwordInput.Clear();
  49. passwordInput.SendKeys(password);
  50. // 输入验证码
  51. var captchaInput = inputList.Skip(2).First();
  52. captchaInput.Clear();
  53. captchaInput.SendKeys("0");
  54. // 提交
  55. var button = Driver.FindElement(By.CssSelector("#pane-account button"));
  56. button.Click();
  57. }
  58. /// <summary>
  59. /// 打开指定页面
  60. /// </summary>
  61. /// <param name="url"></param>
  62. protected async Task GoToUrlAsync(string url)
  63. {
  64. if (url.StartsWith("http")) await Driver.Navigate().GoToUrlAsync(url);
  65. else await Driver.Navigate().GoToUrlAsync(_baseUrl + "/" + url.TrimStart('/'));
  66. await WaitExecutorCompleteAsync();
  67. }
  68. /// <summary>
  69. /// 登录用户敲回车
  70. /// </summary>
  71. /// <param name="text">提示词</param>
  72. protected void WaitEnter(string text = "登录用户敲回车继续...")
  73. {
  74. Console.WriteLine(text);
  75. Console.ReadLine();
  76. }
  77. public void Dispose()
  78. {
  79. Driver.Quit();
  80. Driver.Dispose();
  81. }
  82. }