Selenium Documentation

From edegan.com
Revision as of 12:19, 20 December 2017 by Peterjalbert (talk | contribs)
Jump to navigation Jump to search


McNair Project
Selenium Documentation
Project logo 02.png
Project Information
Project Title Selenium Documentation
Owner Peter Jalbert
Start Date
Deadline
Primary Billing
Notes
Has project status Active
Copyright © 2016 edegan.com. All Rights Reserved.


Selenium Web Driver is a framework often used for automated web application testing. It uses an API to launch a web browser and browse sites from the client's perspective. Popular Selenium bindings exist for Python, Java, Javascript, and other languages. This documentation covers Selenium Web Driver using Python3.

Installation

A full list of installation documentation can be found here.

This documentation assumes you have Python 3.6 or later installed. If you do not, visit the Python Download page.

From the command line, enter

pip install selenium


The Basics

A folder with tutorial code can be found on the RDP in:

E:\McNair\Software\Selenium Tutorial

Launching a Driver

The first step is to launch a driver. This is an object that has information on the current page including its url and web elements, and is the object you interact with to do any sort of navigation. First, import the webdriver:

from selenium import webdriver

Then, create an instance of the web driver. The RDP has bindings for Google Chrome and Mozilla Firefox. The following will launch a web browser on Google Chrome.

driver = webdriver.Chrome()

The GET method is used to visit a website. The get() command in Selenium takes a string url.

driver.get("http://www.google.com")

From here, different methods can be used to interact with the page. Most interactions involve some type of exchange with a web element. Selenium comes with many different ways to locate specific elements. To see the attributes of the element you want to work with, it is often a good idea to visit that page on your own browser, right click on the element you want your program to interact with, and select INSPECT. This will bring up the developer console and display the HTML representation of that element. From there, you can use one of the following selectors that best matches what you need.

Selectors

These functions deal with web elements on the current page the driver is on. Any function that contains find_element_by returns a single web element, and any function that contains find_elements_by returns a list of web elements.

driver.find_element_by_class_name(class_name)

This function takes a string class name of the element you're looking for, and finds the first element on the page that has that class name. If there is a possibility that more than one web element on the page has the same class, you are probably better of using find_elements_by_class_name.

driver.find_element_by_name(name)

This function takes a string name of the element you're looking for, and finds the first element on the page that has a name attribute matching the string. Similar to the find_element_by_class_name function, this is not your best bet if there are multiple objects with the same name attribute.

driver.find_element_by_id(id)

This function takes a string id of the element you're looking for, and finds the element on the page that has an id attribute matching the string. Since ids are guaranteed to be unique, this will always find the element you're looking for. This function is not helpful if the element you want to select does not have an id attribute.

driver.find_element_by_xpath(xpath)

This function takes an XPATH, and returns the first web element that matches the path. This should not be your first choice if many elements can share the same XPATH. Contrary to all the above functions, XPATH can be used to find any web element, regardless of its attributes. However, XPATH takes some time to learn, and is more complex than all of the above. After investing some time, XPATH is the most secure way to find the elements you're looking for.

driver.find_elements_by_class_name(class_name)

This is similar to find_element_by_class_name, except it returns a list of all matches with the class name. This allows you to iterate over the results or index them accordingly. This is often useful for search results, or any sort of list based queries.

driver.find_elements_by_name(name)

Same as find_element_by_name, except it returns a list of all matches.

driver.find_elements_by_xpath(xpath)

Same as find_element_by_xpath, but returns a list of all matches.

A tutorial on XPATH can be found here.


Helpful Links

How to Download a file in Python with a URL

Selenium: Scroll a Webpage

Selenium: Get Children Elements

Advanced

The folder for the Web Driver Executables can be found:

C:\SeleniumDriver

chromedriver.exe is an executable to launch Google Chrome, and geckodriver.exe is an executable to launch Mozilla Firefox. Any new drivers for different web browsers should be placed in this folder.