Mam takie zadanko. Zrealizować scenariusz testowy: loguję się jako admin, dodaję pracownika, eksportuję plik CSV z kontami pracowników i weryfikuję, czy plik ten nie jest pusty. Udaje mi się wyeksportować plik CSV, ale jak go teraz otworzyć i sprawdzić czy nie jest pusty? poniżej kod, ale boję, że bez środowiska przygotowanego nie pójdzie.
Podstawowe pytanie, na które szukam odpowiedzi, to jak w Pythonie wczytać plik CSV i zweryfikować, że nie jest pusty?
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException, NoAlertPresentException
import unittest
import os
import os.path
class Employee(unittest.TestCase):
# Bazowy adres strony
base_url = "http://localhost:9998/"
# Scieżka dostępu do pliku po jego zapisaniu
file_path = os.getcwd() + "\\accounts.csv"
# Dane pracownika
account_name = "icm-test"
account_email = "icm-test@icm.com"
account_password = "!1"
def setUp(self):
fp = webdriver.FirefoxProfile()
# Należy skonfigurować profil przeglądarki, tak aby po kliknięciu
# linka nie pojawiło się okno wyboru katalogu
# https://developer.mozilla.org/en-US/docs/Download_Manager_preferences
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
# Miejsce, gdzie pliki mają zostać zapisane
fp.set_preference("browser.download.dir", os.getcwd())
# Pliki o podanym typie będą automatycznie zapisywane na dysk
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain")
self.driver = webdriver.Firefox(firefox_profile=fp)
#self.driver = webdriver.Firefox()
self.driver.implicitly_wait(5)
self.verificationErrors = []
self.accept_next_alert = True
def test_create_employee(self):
"""
Główna metoda testowa. Nie wymaga modyfikacji
"""
driver = self.driver
driver.get(self.base_url)
self.login()
self.createEmployee()
# Cwiczenie zaawansowane - odkomentuj i zaimplementuj brakujace metody
#self.exportAccounts()
self.verifyAccountCreated()
def login(self):
print("Logowanie przez administratora")
driver = self.driver
driver.find_element_by_xpath("//a[@href = '/signin']").click()
driver.find_element_by_id("inputEmail").send_keys("icm-admin@icm.com")
driver.find_element_by_id("inputPassword").send_keys("!1")
driver.find_element_by_id("signin").click()
self.assertTrue(self.is_element_present(By.XPATH, "//table[@id='incidents']"))
driver.find_element_by_xpath("//a[contains(.,'Logout')]").click()
# TODO Zaimplementuj logowanie administratora
def createEmployee(self):
print("Dodanie pracownika")
driver = self.driver
driver.implicitly_wait(30)
driver.find_element_by_xpath("//a[@href = '/signin']").click()
driver.find_element_by_id("inputEmail").send_keys("icm-admin@icm.com")
driver.find_element_by_id("inputPassword").send_keys("!1")
driver.find_element_by_id("signin").click()
self.assertTrue(self.is_element_present(By.XPATH, "//table[@id='incidents']"))
driver.find_element_by_xpath("//a[@href = '/account/list']").click()
self.assertTrue(self.is_element_present(By.XPATH, "//table[@id='accounts']"))
driver.find_element_by_xpath("//a[@href = '/account/create']").click()
driver.find_element_by_id("email").send_keys("icm-test@icm.com")
driver.find_element_by_id("name").send_keys("icm-test")
driver.find_element_by_id("phone").send_keys("123456")
driver.find_element_by_id("password").send_keys("!1")
driver.find_element_by_id("confirmedPassword").send_keys("!1")
driver.find_element_by_xpath("//button[@id='create']").click()
self.assertTrue(self.is_element_present(By.XPATH, "//span[@id='alert']"))
#driver.find_element_by_xpath("//a[contains(.,'Logout')]").click()
# TODO Zaimplementuj dodanie pracownika
def exportAccounts(self):
print("Eksport kont użytkowników")
driver = self.driver
driver.find_element_by_xpath("//a[@href='/dashboard']").click()
driver.find_element_by_xpath("//a[@href='/export/accounts']").click()
#driver.get('http://localhost:9998/setup?action=do')
# TODO Pobierz plik CSV z kontami użytkowników
def verifyAccountCreated(self):
print("Werfyikacja danych w pliku " + self.file_path)
self.driver.implicitly_wait(30)
self.assertTrue(os.path.exists(self.file_path), msg='Plik ' + self.file_path + ' nie istnieje!')
# TODO
# Zwerfikuj czy w pliku znajdują się dane dodanego użytkownika
# W przypadku braku danych test powinien nie wykonać się.
# Użyj wbudowanej funkcji open() i zweryfikuj czy plik zawiera tekst (1 linia kodu)
# Jeżeli nie zawiera, test powinien się nie wykonać
#self.verifyTextPresent(open('accounts.csv'), '.True')
if True:
self.open()
#self.fail("No content found in file!")
def open(self):
self.driver.get(self.file_path)
def is_element_present(self, how, what):
try:
self.driver.find_element(by=how, value=what)
except NoSuchElementException:
return False
return True
def tearDown(self):
self.driver.get('http://localhost:9998/setup?action=do')
#self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()