• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SeleniumWebDriver Python plik CSV

VPS Starter Arubacloud
+1 głos
231 wizyt
pytanie zadane 28 kwietnia 2016 w Python przez Bogusław Pinkiewicz Użytkownik (520 p.)

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()

 

1 odpowiedź

+2 głosów
odpowiedź 28 kwietnia 2016 przez Surykat Stary wyjadacz (14,760 p.)
wybrane 29 kwietnia 2016 przez Bogusław Pinkiewicz
 
Najlepsza

A to nie wystarczy zrobić tak:

text = open('nazwa_pliku').read()

I sprawdzić, czy długość "text" jest większa od zera? :)

komentarz 28 kwietnia 2016 przez Bogusław Pinkiewicz Użytkownik (520 p.)
edycja 29 kwietnia 2016 przez Bogusław Pinkiewicz
Edycja komentarza

A jednak pomogło, dziękuję.

Podobne pytania

0 głosów
2 odpowiedzi 83 wizyt
pytanie zadane 6 marca w Python przez Fidzi Nowicjusz (120 p.)
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 18 lipca 2023 w Python przez FrikeQ Nowicjusz (170 p.)
0 głosów
1 odpowiedź 135 wizyt
pytanie zadane 16 października 2022 w Python przez Mocaz Użytkownik (560 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...