0

考虑这两个测试:

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

有人可以概述一下我该怎么做吗?谢谢。

4

1 回答 1

0

也许像:

Public Sub Login(dr as ChromeDriver, user as String, pass as String)
    dr.Navigate.GoToUrl("http://myapp.com/landing.aspx")
    dr.FindElementById("HeadLoginView_HeadLoginStatus").Click()
    dr.FindElementById("MainContent_Login1_txtUsername").SendKeys(user)
    dr.FindElementById("MainContent_Login1_Password").SendKeys(pass)
    dr.FindElementById("MainContent_Login1_LoginButton").Click()
End Sub
于 2017-03-06T00:33:52.977 回答