Selenium - WebDriver Advanced Usage
Explicit Waits
# Python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0 from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0 ff = webdriver.Firefox() ff.get("http://somedomain/url_that_delays_loading") try: element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement"))) finally: ff.quit()
-
Expected Conditions
# Python from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) element = wait.until(EC.element_to_be_clickable((By.ID,'someid')))
Implicit Waits
# Python from selenium import webdriver ff = webdriver.Firefox() ff.implicitly_wait(10) # seconds ff.get("http://somedomain/url_that_delays_loading") myDynamicElement = ff.find_element_by_id("myDynamicElement")
Remote WebDriver
-
Taking a Screenshot
# Python from selenium import webdriver driver = webdriver.Remote("http://localhost:4444/wd/hub", webdriver.DesiredCapabilities.FIREFOX.copy()) driver.get("http://www.google.com") driver.get_screenshot_as_file('/Screenshots/google.png')
-
Using a FirefoxProfile
# Python from selenium import webdriver fp = webdriver.FirefoxProfile() # set something on the profile... driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.FIREFOX, browser_profile=fp)
-
Using ChromeOptions
# Python from selenium import webdriver options = webdriver.ChromeOptions() # set some options driver = webdriver.Remote(desired_capabilities=options.to_capabilities())
Using a Proxy
-
Internet Explorer
# Python from selenium import webdriver PROXY = "localhost:8080" # Create a copy of desired capabilities object. desired_capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy() # Change the proxy properties of that copy. desired_capabilities['proxy'] = { "httpProxy":PROXY, "ftpProxy":PROXY, "sslProxy":PROXY, "noProxy":None, "proxyType":"MANUAL", "class":"org.openqa.selenium.Proxy", "autodetect":False } # you have to use remote, otherwise you'll have to code it yourself in python to # dynamically changing the system proxy preferences driver = webdriver.Remote("http://localhost:4444/wd/hub", desired_capabilities)
-
Chrome
Is basically the same as internet explorer. It uses the same configuration on the machine as IE does (on windows). On Mac it uses the System Preference -> Network settings. On Linux it uses (on Ubuntu) System > Preferences > Network Proxy Preferences (Alternatively in “/etc/environment” set http_proxy). As of this writing it is unknown how to set the proxy programmatically.
-
Firefox
# Python from selenium import webdriver from selenium.webdriver.common.proxy import * myProxy = "host:8080" proxy = Proxy({ 'proxyType': ProxyType.MANUAL, 'httpProxy': myProxy, 'ftpProxy': myProxy, 'sslProxy': myProxy, 'noProxy': '' # set this value as desired }) driver = webdriver.Firefox(proxy=proxy) # for remote caps = webdriver.DesiredCapabilities.FIREFOX.copy() proxy.add_to_capabilities(caps) driver = webdriver.Remote(desired_capabilities=caps)
Data Driven Testing
# Python # Collection of String values source = open("input_file.txt", "r") values = source.readlines() source.close() # Execute For loop for each String in the values array for search in values: driver.get('http://www.google.com') driver.find_element_by_name("q").send_keys(search) driver.find_element_by_id("btnG").click() element = WebDriverWait(driver, 5).until(ExpectedConditions.presence_of_element_located((By.XPATH, "//*[contains(., 'Results')]")) assert search in element.text