首页 > 代码库 > Selenium - WebDriver Advanced Usage

Selenium - WebDriver Advanced Usage

Explicit Waits

# Pythonfrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0ff = 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

# Pythonfrom selenium.webdriver.support import expected_conditions as ECwait = WebDriverWait(driver, 10)element = wait.until(EC.element_to_be_clickable((By.ID,someid)))

Implicit Waits

# Pythonfrom selenium import webdriverff = webdriver.Firefox()ff.implicitly_wait(10) # secondsff.get("http://somedomain/url_that_delays_loading")myDynamicElement = ff.find_element_by_id("myDynamicElement")

Remote WebDriver

  • Taking a Screenshot

# Pythonfrom selenium import webdriverdriver = 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

# Pythonfrom selenium import webdriverfp = webdriver.FirefoxProfile()# set something on the profile...driver = webdriver.Remote(desired_capabilities=webdriver.DesiredCapabilities.FIREFOX, browser_profile=fp)
  • Using ChromeOptions

# Pythonfrom selenium import webdriveroptions = webdriver.ChromeOptions()# set some optionsdriver = webdriver.Remote(desired_capabilities=options.to_capabilities())

Using a Proxy

  • Internet Explorer

# Pythonfrom selenium import webdriverPROXY = "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 preferencesdriver = 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

# Pythonfrom selenium import webdriverfrom 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 remotecaps = webdriver.DesiredCapabilities.FIREFOX.copy()proxy.add_to_capabilities(caps)driver = webdriver.Remote(desired_capabilities=caps)

Data Driven Testing

# Python# Collection of String valuessource = open("input_file.txt", "r")values = source.readlines()source.close()# Execute For loop for each String in the values arrayfor 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

 

Selenium - WebDriver Advanced Usage