dotnetco.de

Tips and Tricks for Selenium WebTests

After setting up Selenium for usage in Visual Studio Unit Tests as described in previous posting, now I want to share some tips for writing your unit tests. These tips should help you during the driver initialization and retrieval of web elements.

Initialization

Driver should be initialized only once for all your tests as this makes it easier to switch between different browsers and you don’t have to take care about initialization and termination in each of your tests. Therefore it’s helpful to put the WebDriver Initialization into the Initialization-Sub of your Test class. Additionally you might declare the start URL as a public constant. Here is an example:

<TestClass()>
Public Class SeleniumTests
  Public driver As IWebDriver
  Const HomePageURL As String = "http://localhost:12345/Default.aspx"


 <TestInitialize()>
  Public Sub Initialization()
     driver = New FirefoxDriver
    'driver = New InternetExplorerDriver
    'Only necessary for the correct date format, e.g. PublishedDate
    Thread.CurrentThread.CurrentCulture = New CultureInfo("en")
    Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")
  End Sub


<TestCleanup()>
Public Sub Termination()
   driver.Quit()
 End Sub

 

Get Web Elements

Of course you need to get web elements so for easier access you could use this function.

''' <summary>
''' Waits until the given element is enabled and visible
''' </summary>
''' <param name="webDriver"></param>
''' <param name="definition"></param>
''' <param name="seconds"></param>
''' <returns></returns>
''' <remarks>Needs to wait for .displayed because for e.g. Telerik Treeview all nodes are available but not visible 
''' if the parent node is collapsed and therefore the following error would appear:
''' OpenQA.Selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
''' </remarks>
 Private Function GetWebElement(ByVal webDriver As IWebDriver, ByVal definition As OpenQA.Selenium.By, ByVal seconds As Integer) As IWebElement
   Dim wait As New WebDriverWait(webDriver, TimeSpan.FromSeconds(seconds))
   wait.Until(Function(d)
    Return d.FindElement(definition).Enabled
      And d.FindElement(definition).Displayed
  End Function)
   GetWebElement = webDriver.FindElement(definition)
End Function

 

Leave a Comment