普通文本  |  139行  |  4.83 KB

#!/usr/bin/env python
# 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 os
import re

import pyauto_functional  # Must be imported before pyauto
import pyauto
import pyauto_utils


class AboutPluginsUITest(pyauto.PyUITest):
  """Testcase for chrome://plugins UI."""

  def testAboutPluginDetailInfo(self):
    """Verify chrome://plugins page shows plugin details."""
    self.NavigateToURL('chrome://plugins/')
    driver = self.NewWebDriver()
    detail_link = driver.find_element_by_id('details-link')
    self.assertTrue(self.WaitUntil(lambda: detail_link.is_displayed()),
        msg='Details link could not be found.')
    detail_link.click()
    # Verify that detail info for Remote Viewer plugin shows up.
    # Remote Viewer plugin is expected to be present on all platforms.
    self.assertTrue(self.WaitUntil(lambda: len(driver.find_elements_by_xpath(
        '//*[@jscontent="path"][text()="internal-remoting-viewer"]'))))


class ChromeAboutPluginsUITest(pyauto.PyUITest):
  """Testcase for official build only plugins in chrome://plugins UI."""

  def Debug(self):
    """chrome://plugins test debug method.

    This method will not run automatically.
    """
    self.NavigateToURL('chrome://plugins/')
    driver = self.NewWebDriver()
    import pdb
    pdb.set_trace()

  def _IsEnabled(self, driver, plugin_name):
    """Checks if plugin is enabled.

    Args:
      driver: A Chrome driver object.
      plugin_name: Plugin name to verify.

    Returns:
      True, if plugin is enabled, or False otherwise.
    """
    check_plugin_enabled_js = 'return navigator.plugins["%s"] != undefined' % \
        plugin_name
    return driver.execute_script(check_plugin_enabled_js)

  def _ExpandDetailInfoLink(self, driver):
    """Expand detail info link.

    Args:
      driver: A Chrome driver object.
    """
    detail_link = driver.find_element_by_id('details-link')
    self.assertTrue(self.WaitUntil(lambda: detail_link.is_displayed()),
        msg='Details link could not be found.')
    detail_link.click()

  def _OverridePluginPageAnimation(self, driver):
    """Override the animation for expanding detail info to make sure element
    remain at the same location where web driver found it.

    Args:
      driver: A Chrome driver object.
    """
    override_animation_style_js = """
        style = document.createElement('style');
        style.innerHTML = "* { -webkit-transition: all 0s ease-in !important}";
        document.head.appendChild(style);
        """
    driver.execute_script(override_animation_style_js)

  def testAboutPluginEnableAndDisablePDFPlugin(self):
    """Verify enable and disable pdf plugins from about:plugins page."""
    self.NavigateToURL('chrome://plugins/')
    driver = self.NewWebDriver()

    self._OverridePluginPageAnimation(driver)
    self._ExpandDetailInfoLink(driver)

    pdf_disable_path = '//*[@class="plugin-name"][text()="Chrome PDF Viewer"' \
        ']//ancestor::*[@class="plugin-text"]//a[text()="Disable"]'
    pdf_enable_path = '//*[@class="plugin-name"][text()="Chrome PDF Viewer"' \
        ']//ancestor::*[@class="plugin-text"]//a[text()="Enable"]'

    # Confirm Chrome PDF Viewer plugin is found and find disable PDF link.
    pdf_disable_link = pyauto_utils.WaitForDomElement(self, driver,
                                                      pdf_disable_path)

    # Disable PDF viewer plugin in about:plugins.
    pdf_disable_link.click()
    self.assertTrue(self.WaitUntil(lambda: not
        self._IsEnabled(driver, 'Chrome PDF Viewer')))

    # Re-enable PDF viewer plugin.
    pdf_enable_link = driver.find_element_by_xpath(pdf_enable_path)
    pdf_enable_link.click()
    self.assertTrue(self.WaitUntil(lambda:
        self._IsEnabled(driver, 'Chrome PDF Viewer')))

  def testEnableAndDisableFlashPlugin(self):
    """Verify enable and disable flash plugins from about:plugins page."""
    self.NavigateToURL('chrome://plugins/')
    driver = self.NewWebDriver()

    self._OverridePluginPageAnimation(driver)
    self._ExpandDetailInfoLink(driver)
    flash_plugins_elem = driver.find_element_by_xpath(
        '//*[@jscontent="name"][text()="Flash"]//ancestor' \
        '::*[@class="plugin-text"]')

    # Disable flash plugin from flash detail info.
    flash_disable_link = flash_plugins_elem.find_element_by_xpath(
        './/a[text()="Disable"]')
    flash_disable_link.click()
    self.assertTrue(self.WaitUntil(lambda: not
        self._IsEnabled(driver, 'Shockwave Flash')))

    # Re-enable Flash plugin from flash detail info.
    flash_enable_link = flash_plugins_elem.find_element_by_xpath(
        './/a[text()="Enable"]')
    flash_enable_link.click()
    self.assertTrue(self.WaitUntil(lambda:
        self._IsEnabled(driver, 'Shockwave Flash')))


if __name__ == '__main__':
  pyauto_functional.Main()