Commit ab29ef03 authored by vabr's avatar vabr Committed by Commit bot

[Password manager Python tests] Remove some dead code

This CL removes:
* Unused support for logging in environment.py. The two current diagnostics messages will be replaced later if needed, after the code gets rearranged. The command-line support for log levels was not used (and not working last time I tried).
* Some unused code was removed, including WebsiteTest's SendEnterTo action.
* It simplified the way to obtain all tests names -- no longer needed to instantiate Environment.
* It removes adding ../../../../third_party/webdriver/pylib/ to sys.path -- this has not worked in most cases and was not needed (webdriver path has been added, from various sources, outside of the scripts in the framework we used).

It also removes some part of the unused ability to run all tests, which has recently been simulated by running all tests one by one outside of Python. That was to make the tests run in parallel. This is just a transitional state, and is described in the TODOs.

BUG=369521

Review URL: https://codereview.chromium.org/1022703004

Cr-Commit-Position: refs/heads/master@{#322447}
parent 70deb4f4
......@@ -109,8 +109,6 @@ self.ClickIfClickable("css_selector")
self.GoTo("url")
* HoverOver: find an element using CSS Selector and hover over it.
self.HoverOver("css_selector")
* SendEnterTo: find an element using CSS Selector and send enter to it.
self.SendEnterTo("css_selector")
* IsDisplayed: check if an element is displayed.
self.IsDisplayed("css_selector")
......
......@@ -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
......
......@@ -36,7 +36,6 @@ import subprocess
import tempfile
import time
from environment import Environment
import tests
......@@ -173,7 +172,6 @@ def run_tests(config_path):
for format description.
"""
environment = Environment("", "", "", None, False)
defaults = {("run_options", "tests_in_parallel"): "1"}
config = ConfigParser.ConfigParser()
_apply_defaults(config, defaults)
......@@ -194,8 +192,7 @@ def run_tests(config_path):
user_selected_tests = config.get("run_options", "tests_to_run").split(",")
tests_to_run = user_selected_tests
else:
tests.Tests(environment)
tests_to_run = [test.name for test in environment.websitetests]
tests_to_run = tests.all_tests.keys()
logger = logging.getLogger("run_tests")
logger.log(SCRIPT_DEBUG, "%d tests to run: %s", len(tests_to_run),
......
......@@ -5,11 +5,8 @@
"""WebsiteTest testing class."""
import logging
import sys
import time
sys.path.insert(0, '../../../../third_party/webdriver/pylib/')
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
......@@ -135,16 +132,6 @@ class WebsiteTest:
hover = ActionChains(self.driver).move_to_element(element)
hover.perform()
def SendEnterTo(self, selector):
"""Sends an enter key to an element.
Args:
selector: The element CSS selector.
"""
logging.info("action: SendEnterTo %s" % selector)
body = self.driver.find_element_by_tag_name("body")
body.send_keys(Keys.ENTER)
# Waiting/Displaying actions.
def IsDisplayed(self, selector):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment