1# Copyright (c) 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import ap_spec
6import edimax_ap_configurator
7import os
8import time
9
10class Edimax6428nsAPConfigurator(
11        edimax_ap_configurator.EdimaxAPConfigurator):
12    """Derived class to control the Edimax-Br6428 AP."""
13
14    def navigate_to_page(self, page_number):
15        """Navigate to the required page.
16
17        @param page_number: The page number to navigate to.
18
19        """
20        if page_number == 1:
21            # Open the general settings page.
22            page_url = os.path.join(self.admin_interface_url ,'wlbasic.asp')
23            self.get_url(page_url)
24            self.wait_for_object_by_xpath('//select[@name="band"]')
25        elif page_number == 2:
26            # Open the security settings page.
27            page_url = os.path.join(self.admin_interface_url ,'wlencrypt.asp')
28            self.get_url(page_url)
29            self.wait_for_object_by_xpath('//select[@name="method"]')
30        else:
31            raise RuntimeError('Invalid page number passed.  Number of pages is'
32                               '%d, page value sent was %d' %
33                               (self.get_number_of_pages(), page_number))
34
35
36    def save_page(self, page_number):
37        """ Save page after applying settings.
38
39        @param page_number: The page number to be saved.
40
41        """
42        xpath_ok = ('//input[@name="okbutton"]')
43        self.click_button_by_xpath('//input[@src="graphics/apply1.gif"]',
44                                    alert_handler=self._alert_handler)
45        self.driver.find_element_by_xpath('//input[@value="APPLY"]').click()
46        element = self.wait_for_object_by_xpath(xpath_ok)
47        xpath_done = '//input[@name="okbutton" and @value="OK"]'
48        while element and not(self.object_by_xpath_exist(xpath_done)):
49            time.sleep(0.5)
50        self.click_button_by_xpath(xpath_ok, alert_handler=self._alert_handler)
51
52
53    def _set_security_wpapsk(self, security, shared_key, update_interval=None):
54        self.wait_for_object_by_xpath('//input[@name="pskValue"]')
55        self.select_item_from_popup_by_xpath('WPA pre-shared key',
56                                             '//select[@name="method"]')
57        if security == ap_spec.SECURITY_TYPE_WPAPSK:
58            wpa_item = 'wpaCipher1'
59        else:
60            wpa_item = 'wpaCipher2'
61        self.click_button_by_id(wpa_item, alert_handler=self._alert_handler)
62        self.select_item_from_popup_by_xpath('Passphrase',
63                                             '//select[@name="pskFormat"]')
64        self.set_content_of_text_field_by_xpath(shared_key,
65                                                '//input[@name="pskValue"]',
66                                                abort_check=True)
67
68
69    def _set_security_wep(self, key_value, authentication):
70        self.wait_for_object_by_xpath('//input[@name="key1"]')
71        self.select_item_from_popup_by_xpath('WEP', '//select[@name="method"]')
72        self.select_item_from_popup_by_xpath('64-bit',
73                                             '//select[@name="length"]')
74        self.select_item_from_popup_by_xpath('ASCII (5  characters)',
75                                             '//select[@name="format"]')
76        self.set_content_of_text_field_by_xpath(key_value,
77                                                '//input[@name="key1"]',
78                                                abort_check=True)
79