OLD | NEW |
(Empty) | |
| 1 import time |
| 2 from selenium import webdriver |
| 3 from selenium.webdriver.chrome.options import Options |
| 4 import xml.etree.ElementTree as ET |
| 5 |
| 6 from website import Website |
| 7 |
| 8 |
| 9 class Environment: |
| 10 |
| 11 def __init__(self, passwords_file = ""): |
| 12 options = Options() |
| 13 """Use random empty folder for profile, otherwise chromedriver is going to |
| 14 create it's own where saving passwords is disabled. |
| 15 """ |
| 16 options.add_argument("enable-automatic-password-saving") |
| 17 #chrome path |
| 18 options.binary_location = ( |
| 19 "/usr/local/google/home/rchtara/chrome/src/out/Debug/chrome") |
| 20 #new profile path |
| 21 options.add_argument("user-data-dir=/tmp/ChromePasswordManagerTestvvvvvv") |
| 22 #chromedriver path |
| 23 self.driver = webdriver.Chrome( |
| 24 "/usr/local/google/home/rchtara/chrome/src/out/Debug/chromedriver", 0, |
| 25 options) |
| 26 self.internals_window = self.driver.current_window_handle |
| 27 self.websitewindow = None |
| 28 self.websites = [] |
| 29 |
| 30 self.passwords_tree = None |
| 31 if passwords_file != "": |
| 32 self.passwords_tree = ET.parse(passwords_file).getroot() |
| 33 |
| 34 def AddWebsite(self, |
| 35 name, |
| 36 username = None, |
| 37 password = None, |
| 38 username_not_auto=False): |
| 39 website = ( |
| 40 Website( |
| 41 name, username, password, self.driver, self, username_not_auto)) |
| 42 self.websites.append(website) |
| 43 return website |
| 44 |
| 45 def RemoveAllPasswords(self): |
| 46 print "RemoveAllPasswords" |
| 47 self.driver.get("chrome://settings/passwords") |
| 48 self.driver.switch_to_frame("settings") |
| 49 |
| 50 for website in self.websites: |
| 51 urls, _ = self.GetPasswordsAndButtons() |
| 52 website.RemoveAllPasswords(urls) |
| 53 |
| 54 def GetPasswordsAndButtons(self): |
| 55 arr = self.driver.find_elements_by_css_selector( |
| 56 "#saved-passwords-list .deletable-item") |
| 57 urls = [] |
| 58 remove_buttons = [] |
| 59 for entry in arr: |
| 60 urls.append(entry.find_element_by_class_name("url").text) |
| 61 remove_buttons.append( |
| 62 entry.find_element_by_class_name("row-delete-button")) |
| 63 return (urls, remove_buttons) |
| 64 |
| 65 def NewWindow(self): |
| 66 if self.websitewindow == None: |
| 67 self.driver.get("https://google.com") |
| 68 |
| 69 """It's not possible to open a new tab to chrome:// urls directly, |
| 70 this why we go to google.com website then we go to chrome:// |
| 71 sometime chromedriver doesn't detect that www.google.com is loaded |
| 72 and the script just stops, this is why you should redo the |
| 73 tests again. |
| 74 """ |
| 75 |
| 76 a = self.driver.execute_script( |
| 77 "var d=document; var " |
| 78 "a=d.createElement('a');a.target='_blank';a.href=arguments[0];" |
| 79 "a.innerHTML='.';d.body.appendChild(a);" |
| 80 " return a;", |
| 81 "https://google.com") |
| 82 a.click() |
| 83 time.sleep(1) |
| 84 |
| 85 self.websitewindow = self.driver.window_handles[-1] |
| 86 |
| 87 self.driver.switch_to_window(self.websitewindow) |
| 88 |
| 89 def AllTests(self): |
| 90 self.RemoveAllPasswords() |
| 91 self.NewWindow() |
| 92 for website in self.websites: |
| 93 website.WrongLoginTest() |
| 94 website.SucessfulLoginTest() |
| 95 website.SucessfulLoginWithAutofilledPasswordTest() |
| 96 |
| 97 self.RemoveAllPasswords() |
| 98 for website in self.websites: |
| 99 website.SucessfulLoginAfterDeletionTest() |
| 100 |
| 101 def Quit(self): |
| 102 self.driver.quit() |
| 103 |
| 104 |
OLD | NEW |