| Index: chrome/test/functional/ap_lab/ap_configurator.py
|
| ===================================================================
|
| --- chrome/test/functional/ap_lab/ap_configurator.py (revision 261231)
|
| +++ chrome/test/functional/ap_lab/ap_configurator.py (working copy)
|
| @@ -1,355 +0,0 @@
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import copy
|
| -import logging
|
| -import os
|
| -
|
| -import pyauto_ap_configurator
|
| -import pyauto
|
| -
|
| -import selenium.common.exceptions
|
| -from selenium.webdriver.support.ui import WebDriverWait
|
| -
|
| -
|
| -class APConfigurator(object):
|
| - """Base class for objects to configure access points using webdriver."""
|
| -
|
| - def __init__(self, pyauto_instance):
|
| - self.pyauto_instance = pyauto_instance
|
| - self._driver = pyauto_instance.NewWebDriver()
|
| - # Any call to wait.until() will raise an exception if the timeout is hit.
|
| - self._wait = WebDriverWait(self._driver, timeout=5)
|
| -
|
| - # Possible bands
|
| - self.band_2ghz = '2.4GHz'
|
| - self.band_5ghz = '5GHz'
|
| -
|
| - # Possible modes
|
| - self.mode_a = 0x0001
|
| - self.mode_b = 0x0010
|
| - self.mode_g = 0x0100
|
| - self.mode_n = 0x1000
|
| -
|
| - # Possible security settings
|
| - self.security_disabled = 'Disabled'
|
| - self.security_wep = 'WEP'
|
| - self.security_wpawpsk = 'WPA-Personal'
|
| - self.security_wpa2wpsk = 'WPA2-Personal'
|
| - self.security_wpa8021x = 'WPA-Enterprise'
|
| - self.security_wpa28021x = 'WPA2-Enterprise'
|
| -
|
| - self.wep_authentication_open = 'Open'
|
| - self.wep_authentication_shared = 'Shared Key'
|
| -
|
| - self._command_list = []
|
| -
|
| - def _WaitForObjectByXPath(self, xpath):
|
| - """Waits for an object to appear."""
|
| - try:
|
| - self._wait.until(lambda _: self._driver.find_element_by_xpath(xpath))
|
| - except selenium.common.exceptions.TimeoutException, e:
|
| - logging.exception('Unable to find the wait for object by xpath: %s\n'
|
| - 'WebDriver exception: %s', xpath, str(e))
|
| -
|
| - def SelectItemFromPopupByID(self, item, element_id, wait_for_xpath=None):
|
| - """Selects an item from a popup, by passing the element ID.
|
| -
|
| - Args:
|
| - item: the item to select from the popup
|
| - element_id: the html ID of the item
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - xpath = 'id("%s")' % element_id
|
| - self.SelectItemFromPopupByXPath(item, xpath, wait_for_xpath)
|
| -
|
| - def SelectItemFromPopupByXPath(self, item, xpath, wait_for_xpath=None):
|
| - """Selects an item from a popup, by passing the xpath of the popup.
|
| -
|
| - Args:
|
| - item: the item to select from the popup
|
| - xpath: the xpath of the popup
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - popup = self._driver.find_element_by_xpath(xpath)
|
| - for option in popup.find_elements_by_tag_name('option'):
|
| - if option.text == item:
|
| - option.click()
|
| - break
|
| - if wait_for_xpath: self._WaitForObjectByXPath(wait_for_xpath)
|
| -
|
| - def SetContentOfTextFieldByID(self, content, text_field_id,
|
| - wait_for_xpath=None):
|
| - """Sets the content of a textfield, by passing the element ID.
|
| -
|
| - Args:
|
| - content: the content to apply to the textfield
|
| - text_field_id: the html ID of the textfield
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - xpath = 'id("%s")' % text_field_id
|
| - self.SetConentsOfTextFieldByXPath(content, xpath, wait_for_xpath)
|
| -
|
| - def SetConentsOfTextFieldByXPath(self, content, xpath, wait_for_xpath=None):
|
| - """Sets the content of a textfield, by passing the xpath.
|
| -
|
| - Args:
|
| - content: the content to apply to the textfield
|
| - xpath: the xpath of the textfield
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - # When we can get the value we know the text field is ready.
|
| - text_field = self._driver.find_element_by_xpath(xpath)
|
| - try:
|
| - self._wait.until(lambda _: text_field.get_attribute('value'))
|
| - except selenium.common.exceptions.TimeoutException, e:
|
| - logging.exception('Unable to obtain the value of the text field %s.\n'
|
| - 'WebDriver exception: %s', wait_for_xpath, str(e))
|
| - text_field = self._driver.find_element_by_xpath(xpath)
|
| - text_field.clear()
|
| - text_field.send_keys(content)
|
| - if wait_for_xpath: self._WaitForObjectByXPath(wait_for_xpath)
|
| -
|
| - def SetCheckBoxSelectedByID(self, check_box_id, selected=True,
|
| - wait_for_xpath=None):
|
| - """Sets the state of a checkbox, by passing the ID.
|
| -
|
| - Args:
|
| - check_box_id: the html id of the checkbox
|
| - selected: True to enable the checkbox; False otherwise
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - xpath = 'id("%s")' % check_box_id
|
| - self.SetCheckBoxSelectedByXPath(xpath, selected, wait_for_xpath)
|
| -
|
| - def SetCheckBoxSelectedByXPath(self, xpath, selected=True,
|
| - wait_for_xpath=None):
|
| - """Sets the state of a checkbox, by passing the xpath.
|
| -
|
| - Args:
|
| - xpath: the xpath of the checkbox
|
| - selected: True to enable the checkbox; False otherwise
|
| - wait_for_xpath: an item to wait for before returning
|
| - """
|
| - check_box = self._driver.find_element_by_xpath(xpath)
|
| - value = check_box.get_attribute('value')
|
| - if (value == '1' and not selected) or (value == '0' and selected):
|
| - check_box.click()
|
| - if wait_for_xpath: self._WaitForObjectByXPath(wait_for_xpath)
|
| -
|
| - def AddItemToCommandList(self, method, args, page, priority):
|
| - """Adds commands to be executed against the AP web UI.
|
| -
|
| - Args:
|
| - method: the method to run
|
| - args: the arguments for the method you want executed
|
| - page: the page on the web ui where the method should be run against
|
| - priority: the priority of the method
|
| - """
|
| - self._command_list.append({'method': method,
|
| - 'args': copy.copy(args),
|
| - 'page': page,
|
| - 'priority': priority})
|
| -
|
| - def GetRouterName(self):
|
| - """Returns a string to describe the router.
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def GetRouterShortName(self):
|
| - """Returns a short string to describe the router.
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def GetNumberOfPages(self):
|
| - """Returns the number of web pages used to configure the router.
|
| -
|
| - Note: This is used internally by applySettings, and this method must be
|
| - implemented by the derived class.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def GetSupportedBands(self):
|
| - """Returns a list of dictionaries describing the supported bands.
|
| -
|
| - Example: returned is a dictionary of band and a list of channels. The band
|
| - object returned must be one of those defined in the __init___ of
|
| - this class.
|
| -
|
| - supported_bands = [{'band' : self.band_2GHz,
|
| - 'channels' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]},
|
| - {'band' : self.band_5ghz,
|
| - 'channels' : [26, 40, 44, 48, 149, 153, 157, 161, 165]}]
|
| -
|
| - Returns:
|
| - A list of dictionaries as described above
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def GetSupportedModes(self):
|
| - """Returns a list of dictionaries describing the supported modes.
|
| -
|
| - Example: returned is a dictionary of band and a list of modess. The band
|
| - and modes objects returned must be one of those defined in the
|
| - __init___ of this class.
|
| -
|
| - supported_modes = [{'band' : self.band_2GHz,
|
| - 'modes' : [mode_b, mode_b | mode_g]},
|
| - {'band' : self.band_5ghz,
|
| - 'modes' : [mode_a, mode_n, mode_a | mode_n]}]
|
| -
|
| - Returns:
|
| - A list of dictionaries as described above
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def NavigateToPage(self, page_number):
|
| - """Navigates to the page corresponding to the given page number.
|
| -
|
| - This method performs the translation between a page number and a url to
|
| - load. This is used internally by applySettings.
|
| -
|
| - Args:
|
| - page_number: Page number of the page to load
|
| -
|
| - Returns:
|
| - True if navigation is successful; False otherwise.
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SavePage(self, page_number):
|
| - """Saves the given page.
|
| -
|
| - Args:
|
| - page_number: Page number of the page to save.
|
| -
|
| - Returns:
|
| - True if navigation is successful; False otherwise.
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetMode(self, mode, band=None):
|
| - """Sets the mode.
|
| -
|
| - Args:
|
| - mode: must be one of the modes listed in __init__()
|
| - band: the band to select
|
| -
|
| - Note: The derived class must implement this method
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetRadio(self, enabled=True):
|
| - """Turns the radio on and off.
|
| -
|
| - Args:
|
| - enabled: True to turn on the radio; False otherwise
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetSSID(self, ssid):
|
| - """Sets the SSID of the wireless network.
|
| -
|
| - Args:
|
| - ssid: Name of the wireless network
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetChannel(self, channel):
|
| - """Sets the channel of the wireless network.
|
| -
|
| - Args:
|
| - channel: Integer value of the channel
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetBand(self, band):
|
| - """Sets the band of the wireless network.
|
| -
|
| - Currently there are only two possible values for band 2kGHz and 5kGHz.
|
| -
|
| - Args:
|
| - band: Constant describing the band type
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetSecurityDisabled(self):
|
| - """Disables the security of the wireless network.
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetSecurityWEP(self, key_value, authentication):
|
| - """Enabled WEP security for the wireless network.
|
| -
|
| - Args:
|
| - key_value: encryption key to use
|
| - authentication: one of two supported authentication types:
|
| - wep_authentication_open or wep_authentication_shared
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetSecurityWPAPSK(self, shared_key, update_interval=1800):
|
| - """Enabled WPA using a private security key for the wireless network.
|
| -
|
| - Args:
|
| - shared_key: shared encryption key to use
|
| - update_interval: number of seconds to wait before updating
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def SetVisibility(self, visible=True):
|
| - """Set the visibility of the wireless network.
|
| -
|
| - Args:
|
| - visible: True for visible; False otherwise
|
| -
|
| - Note: The derived class must implement this method.
|
| - """
|
| - raise NotImplementedError
|
| -
|
| - def ApplySettings(self):
|
| - """Apply all settings to the access point."""
|
| - # Pull items by page and then sort
|
| - if self.GetNumberOfPages() == -1:
|
| - self.fail(msg='Number of pages is not set.')
|
| - page_range = range(1, self.GetNumberOfPages() + 1)
|
| - for i in page_range:
|
| - page_commands = []
|
| - for command in self._command_list:
|
| - if command['page'] == i:
|
| - page_commands.append(command)
|
| - # Sort the commands in this page by priority
|
| - sorted_page_commands = sorted(page_commands, key=lambda k: k['priority'])
|
| - if sorted_page_commands and self.NavigateToPage(i):
|
| - for command in sorted_page_commands:
|
| - command['method'](*command['args'])
|
| - self.SavePage(i)
|
| - self._command_list = []
|
| -
|
|
|