考虑这两个测试:
Imports OpenQA.Selenium
Imports OpenQA.Selenium.Chrome
<TestClass()> Public Class DSCSLoginTest
<TestMethod()> Public Sub DSCSLoginLinkTest()
Dim driver As New ChromeDriver()
driver.Navigate.GoToUrl("http://myapp.com/landing.aspx")
'click login
driver.FindElementById("HeadLoginView_HeadLoginStatus").Click()
Assert.AreEqual("http://myapp.com/Login.aspx", driver.Url)
'fill in username
driver.FindElementById("MainContent_Login1_txtUsername").SendKeys("user")
'fill in password
driver.FindElementById("MainContent_Login1_Password").SendKeys("pass")
'click login
driver.FindElementById("MainContent_Login1_LoginButton").Click()
'test correct page
Assert.AreEqual("http://myapp.com/loginok.aspx", driver.Url)
'test correct title
Dim title As String = driver.FindElementById("HeadContent_lblHeader").Text()
Assert.AreEqual("Welcome to MyApp", title)
End Sub
<TestMethod()> Public Sub DSCSCantLoginWithoutPassword()
Dim driver As New ChromeDriver()
driver.Navigate.GoToUrl("http://myapp.com/landing.aspx")
'click login
driver.FindElementById("HeadLoginView_HeadLoginStatus").Click()
Assert.AreEqual("http://myapp.com/Login.aspx", driver.Url)
'fill in username
driver.FindElementById("MainContent_Login1_txtUsername").SendKeys("user")
'fill in password
driver.FindElementById("MainContent_Login1_Password").SendKeys("")
'click login
driver.FindElementById("MainContent_Login1_LoginButton").Click()
'test correct page
Assert.AreEqual("http://myapp.com/Login.aspx", driver.Url)
'test error recognition
Dim validationResponse As String = driver.FindElementById("MainContent_Login1_PasswordRequired").Text
Assert.AreEqual("*", validationResponse)
End Sub
End Class
您可以看到对登录部分的浏览是重复的。会有更多的测试取决于用户首先登录,所以理想情况下,我想将它重构为另一个类,以便能够首先调用诸如 login() 或 loginAsAdmin() 之类的东西,所以我不必保留在重复自己。
当然,这些测试并不完美。我为用户依赖数据库中的数据这一事实已经是一种味道,但这些测试正在投入到遗留项目中,并且在某些方面是一项学术练习。
理想情况下,我想要类似的东西:
login()
封装足够让我登录,例如:
Dim driver As New ChromeDriver()
driver.Navigate.GoToUrl("http://myapp.com/landing.aspx")
'click login
driver.FindElementById("HeadLoginView_HeadLoginStatus").Click()
'fill in username
driver.FindElementById("MainContent_Login1_txtUsername").SendKeys("user")
'fill in password
driver.FindElementById("MainContent_Login1_Password").SendKeys("pass")
'click login
driver.FindElementById("MainContent_Login1_LoginButton").Click()
End Sub
有人可以概述一下我该怎么做吗?谢谢。