Home | History | Annotate | Download | only in functional
      1 #!/usr/bin/env python
      2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 import os
      7 import re
      8 
      9 import pyauto_functional  # Must be imported before pyauto
     10 import pyauto
     11 import pyauto_utils
     12 
     13 
     14 class AboutPluginsUITest(pyauto.PyUITest):
     15   """Testcase for chrome://plugins UI."""
     16 
     17   def testAboutPluginDetailInfo(self):
     18     """Verify chrome://plugins page shows plugin details."""
     19     self.NavigateToURL('chrome://plugins/')
     20     driver = self.NewWebDriver()
     21     detail_link = driver.find_element_by_id('details-link')
     22     self.assertTrue(self.WaitUntil(lambda: detail_link.is_displayed()),
     23         msg='Details link could not be found.')
     24     detail_link.click()
     25     # Verify that detail info for Remote Viewer plugin shows up.
     26     # Remote Viewer plugin is expected to be present on all platforms.
     27     self.assertTrue(self.WaitUntil(lambda: len(driver.find_elements_by_xpath(
     28         '//*[@jscontent="path"][text()="internal-remoting-viewer"]'))))
     29 
     30 
     31 class ChromeAboutPluginsUITest(pyauto.PyUITest):
     32   """Testcase for official build only plugins in chrome://plugins UI."""
     33 
     34   def Debug(self):
     35     """chrome://plugins test debug method.
     36 
     37     This method will not run automatically.
     38     """
     39     self.NavigateToURL('chrome://plugins/')
     40     driver = self.NewWebDriver()
     41     import pdb
     42     pdb.set_trace()
     43 
     44   def _IsEnabled(self, driver, plugin_name):
     45     """Checks if plugin is enabled.
     46 
     47     Args:
     48       driver: A Chrome driver object.
     49       plugin_name: Plugin name to verify.
     50 
     51     Returns:
     52       True, if plugin is enabled, or False otherwise.
     53     """
     54     check_plugin_enabled_js = 'return navigator.plugins["%s"] != undefined' % \
     55         plugin_name
     56     return driver.execute_script(check_plugin_enabled_js)
     57 
     58   def _ExpandDetailInfoLink(self, driver):
     59     """Expand detail info link.
     60 
     61     Args:
     62       driver: A Chrome driver object.
     63     """
     64     detail_link = driver.find_element_by_id('details-link')
     65     self.assertTrue(self.WaitUntil(lambda: detail_link.is_displayed()),
     66         msg='Details link could not be found.')
     67     detail_link.click()
     68 
     69   def _OverridePluginPageAnimation(self, driver):
     70     """Override the animation for expanding detail info to make sure element
     71     remain at the same location where web driver found it.
     72 
     73     Args:
     74       driver: A Chrome driver object.
     75     """
     76     override_animation_style_js = """
     77         style = document.createElement('style');
     78         style.innerHTML = "* { -webkit-transition: all 0s ease-in !important}";
     79         document.head.appendChild(style);
     80         """
     81     driver.execute_script(override_animation_style_js)
     82 
     83   def testAboutPluginEnableAndDisablePDFPlugin(self):
     84     """Verify enable and disable pdf plugins from about:plugins page."""
     85     self.NavigateToURL('chrome://plugins/')
     86     driver = self.NewWebDriver()
     87 
     88     self._OverridePluginPageAnimation(driver)
     89     self._ExpandDetailInfoLink(driver)
     90 
     91     pdf_disable_path = '//*[@class="plugin-name"][text()="Chrome PDF Viewer"' \
     92         ']//ancestor::*[@class="plugin-text"]//a[text()="Disable"]'
     93     pdf_enable_path = '//*[@class="plugin-name"][text()="Chrome PDF Viewer"' \
     94         ']//ancestor::*[@class="plugin-text"]//a[text()="Enable"]'
     95 
     96     # Confirm Chrome PDF Viewer plugin is found and find disable PDF link.
     97     pdf_disable_link = pyauto_utils.WaitForDomElement(self, driver,
     98                                                       pdf_disable_path)
     99 
    100     # Disable PDF viewer plugin in about:plugins.
    101     pdf_disable_link.click()
    102     self.assertTrue(self.WaitUntil(lambda: not
    103         self._IsEnabled(driver, 'Chrome PDF Viewer')))
    104 
    105     # Re-enable PDF viewer plugin.
    106     pdf_enable_link = driver.find_element_by_xpath(pdf_enable_path)
    107     pdf_enable_link.click()
    108     self.assertTrue(self.WaitUntil(lambda:
    109         self._IsEnabled(driver, 'Chrome PDF Viewer')))
    110 
    111   def testEnableAndDisableFlashPlugin(self):
    112     """Verify enable and disable flash plugins from about:plugins page."""
    113     self.NavigateToURL('chrome://plugins/')
    114     driver = self.NewWebDriver()
    115 
    116     self._OverridePluginPageAnimation(driver)
    117     self._ExpandDetailInfoLink(driver)
    118     flash_plugins_elem = driver.find_element_by_xpath(
    119         '//*[@jscontent="name"][text()="Flash"]//ancestor' \
    120         '::*[@class="plugin-text"]')
    121 
    122     # Disable flash plugin from flash detail info.
    123     flash_disable_link = flash_plugins_elem.find_element_by_xpath(
    124         './/a[text()="Disable"]')
    125     flash_disable_link.click()
    126     self.assertTrue(self.WaitUntil(lambda: not
    127         self._IsEnabled(driver, 'Shockwave Flash')))
    128 
    129     # Re-enable Flash plugin from flash detail info.
    130     flash_enable_link = flash_plugins_elem.find_element_by_xpath(
    131         './/a[text()="Enable"]')
    132     flash_enable_link.click()
    133     self.assertTrue(self.WaitUntil(lambda:
    134         self._IsEnabled(driver, 'Shockwave Flash')))
    135 
    136 
    137 if __name__ == '__main__':
    138   pyauto_functional.Main()
    139