Index: components/test/data/password_manager/automated_tests/environment.py |
diff --git a/components/test/data/password_manager/automated_tests/environment.py b/components/test/data/password_manager/automated_tests/environment.py |
index 84cf6314b3745bf8f1f5c013728338f52c1cf72c..45cec1cc4a59780c8ae0e429ca9711b62ee329d1 100644 |
--- a/components/test/data/password_manager/automated_tests/environment.py |
+++ b/components/test/data/password_manager/automated_tests/environment.py |
@@ -4,19 +4,12 @@ |
"""The testing Environment class.""" |
-import logging |
+import os |
import shutil |
-import sys |
import time |
-import traceback |
from xml.etree import ElementTree |
-from xml.sax.saxutils import escape |
- |
-sys.path.insert(0, '../../../../third_party/webdriver/pylib/') |
from selenium import webdriver |
-from selenium.common.exceptions import NoSuchElementException |
-from selenium.common.exceptions import WebDriverException |
from selenium.webdriver.chrome.options import Options |
@@ -46,8 +39,7 @@ class Environment: |
"""Sets up the testing Environment. """ |
def __init__(self, chrome_path, chromedriver_path, profile_path, |
- passwords_path, enable_automatic_password_saving, |
- numeric_level=None, log_to_console=False, log_file=""): |
+ passwords_path, enable_automatic_password_saving): |
"""Creates a new testing Environment. |
Args: |
@@ -57,61 +49,35 @@ class Environment: |
passwords_path: The usernames and passwords file. |
enable_automatic_password_saving: If True, the passwords are going to be |
saved without showing the prompt. |
- numeric_level: The log verbosity. |
- log_to_console: If True, the debug logs will be shown on the console. |
- log_file: The file where to store the log. If it's empty, the log will |
- not be stored. |
Raises: |
Exception: An exception is raised if |profile_path| folder could not be |
removed. |
""" |
- # Setting up the login. |
- if numeric_level is not None: |
- if log_file: |
- # Set up logging to file. |
- logging.basicConfig(level=numeric_level, |
- filename=log_file, |
- filemode='w') |
- |
- if log_to_console: |
- console = logging.StreamHandler() |
- console.setLevel(numeric_level) |
- # Add the handler to the root logger. |
- logging.getLogger('').addHandler(console) |
- |
- elif log_to_console: |
- logging.basicConfig(level=numeric_level) |
# Cleaning the chrome testing profile folder. |
- try: |
+ if os.path.exists(profile_path): |
shutil.rmtree(profile_path) |
- except Exception, e: |
- pass |
- # If |chrome_path| is not defined, this means that we are in the dashboard |
- # website, and we just need to get the list of all websites. In this case, |
- # we don't need to initilize the webdriver. |
- if chrome_path: |
- options = Options() |
- self.enable_automatic_password_saving = enable_automatic_password_saving |
- if enable_automatic_password_saving: |
- options.add_argument("enable-automatic-password-saving") |
- # Chrome path. |
- options.binary_location = chrome_path |
- # Chrome testing profile path. |
- options.add_argument("user-data-dir=%s" % profile_path) |
- |
- # The webdriver. It's possible to choose the port the service is going to |
- # run on. If it's left to 0, a free port will be found. |
- self.driver = webdriver.Chrome(chromedriver_path, 0, options) |
- # The password internals window. |
- self.internals_window = self.driver.current_window_handle |
- if passwords_path: |
- # An xml tree filled with logins and passwords. |
- self.passwords_tree = ElementTree.parse(passwords_path).getroot() |
- else: |
- raise Exception("Error: |passwords_path| needs to be provided if" |
- "|chrome_path| is provided, otherwise the tests could not be run") |
+ options = Options() |
+ self.enable_automatic_password_saving = enable_automatic_password_saving |
+ if enable_automatic_password_saving: |
+ options.add_argument("enable-automatic-password-saving") |
+ # Chrome path. |
+ options.binary_location = chrome_path |
+ # Chrome testing profile path. |
+ options.add_argument("user-data-dir=%s" % profile_path) |
+ |
+ # The webdriver. It's possible to choose the port the service is going to |
+ # run on. If it's left to 0, a free port will be found. |
+ self.driver = webdriver.Chrome(chromedriver_path, 0, options) |
+ # The password internals window. |
+ self.internals_window = self.driver.current_window_handle |
+ if passwords_path: |
+ # An xml tree filled with logins and passwords. |
+ self.passwords_tree = ElementTree.parse(passwords_path).getroot() |
+ else: |
+ raise Exception("Error: |passwords_path| needs to be provided if" |
+ "|chrome_path| is provided, otherwise the tests could not be run") |
# Password internals page. |
self.internals_page = "chrome://password-manager-internals/" |
# The Website window. |
@@ -119,9 +85,7 @@ class Environment: |
# The WebsiteTests list. |
self.websitetests = [] |
# Map messages to the number of their appearance in the log. |
- self.message_count = dict() |
- self.message_count[MESSAGE_ASK] = 0 |
- self.message_count[MESSAGE_SAVE] = 0 |
+ self.message_count = { MESSAGE_ASK: 0, MESSAGE_SAVE: 0 } |
# The tests needs two tabs to work. A new tab is opened with the first |
# GoTo. This is why we store here whether or not it's the first time to |
# execute GoTo. |
@@ -132,25 +96,29 @@ class Environment: |
def AddWebsiteTest(self, websitetest): |
"""Adds a WebsiteTest to the testing Environment. |
+ TODO(vabr): Currently, this is only called at most once for each |
+ Environment instance. That is because to run all tests efficiently in |
+ parallel, each test gets its own process spawned (outside of Python). |
+ That makes sense, but then we should flatten the hierarchy of calls |
+ and consider making the 1:1 relation of environment to tests more |
+ explicit. |
+ |
Args: |
websitetest: The WebsiteTest instance to be added. |
""" |
websitetest.environment = self |
- if hasattr(self, "driver"): |
- websitetest.driver = self.driver |
- if hasattr(self, "passwords_tree") and self.passwords_tree is not None: |
- if not websitetest.username: |
- username_tag = ( |
- self.passwords_tree.find( |
- ".//*[@name='%s']/username" % websitetest.name)) |
- if username_tag.text: |
- websitetest.username = username_tag.text |
- if not websitetest.password: |
- password_tag = ( |
- self.passwords_tree.find( |
- ".//*[@name='%s']/password" % websitetest.name)) |
- if password_tag.text: |
- websitetest.password = password_tag.text |
+ # TODO(vabr): Make driver a property of WebsiteTest. |
+ websitetest.driver = self.driver |
+ if not websitetest.username: |
+ username_tag = ( |
+ self.passwords_tree.find( |
+ ".//*[@name='%s']/username" % websitetest.name)) |
+ websitetest.username = username_tag.text |
+ if not websitetest.password: |
+ password_tag = ( |
+ self.passwords_tree.find( |
+ ".//*[@name='%s']/password" % websitetest.name)) |
+ websitetest.password = password_tag.text |
self.websitetests.append(websitetest) |
def ClearCache(self, clear_passwords): |
@@ -160,7 +128,6 @@ class Environment: |
Args: |
clear_passwords : Clear all the passwords if the bool value is true. |
""" |
- logging.info("\nClearCache\n") |
self.driver.get("chrome://settings/clearBrowserData") |
self.driver.switch_to_frame("settings") |
script = ( |
@@ -184,7 +151,6 @@ class Environment: |
self.EnablePasswordsSaving() |
def EnablePasswordsSaving(self): |
- logging.info("\nEnablePasswordSaving\n") |
self.driver.get("chrome://settings") |
self.driver.switch_to_frame("settings") |
script = "document.getElementById('advanced-settings-expander').click();" |
@@ -294,6 +260,8 @@ class Environment: |
def AllTests(self, prompt_test): |
"""Runs the tests on all the WebsiteTests. |
+ TODO(vabr): Currently, "all tests" always means one. |
+ |
Args: |
prompt_test: If True, tests caring about showing the save-password |
prompt are going to be run, otherwise tests which don't care about |