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 = [] |
- |