Селен Python с использованием openpyxl для записи результата в файл excel, но в файл excel записывается только случай

Я только начал изучать Selenium с помощью Python на прошлой неделе, я пишу тестовый пример с 4 шагами, на шагах 3 и 4, если это пройдено / не пройдено, результат будет записан в файл Excel. Но когда я запускаю тестовый пример, есть только один шаг, который может записать результат в файл excel, любая помощь? Кстати, извините за мой плохой английский: P

Мой сценарий
Шаг 1. Введите имя пользователя
Шаг 2. Введите пароль
Шаг 3. Нажмите кнопку входа в систему
Шаг 4. Дождитесь появления логотипа Gmail

Вот мой код:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
from openpyxl import Workbook

class BasicTest(unittest.TestCase):

def setUp(self):
    self.driver = webdriver.Firefox()
    self.driver.get("https://www.gmail.com")
    self.LoginXpath = "//input[@value='Sign in']"
    self.LogoXpath = "//a[contains(@href, '#inbox')]"
    self.gmailUserName = "username"
    self.gmailPassword = "password"
    self.emailFieldID = "Email"
    self.passFieldID = "Passwd"
    self.InboxXpath = "id(':4b')/x:div/x:div[1]/x:span/x:a"

def test_Basic(self):
    driver = self.driver
    driver.find_element_by_id(self.emailFieldID).send_keys(self.gmailUserName)
    driver.find_element_by_id(self.passFieldID).send_keys(self.gmailPassword)


    try:
        driver.find_element_by_xpath(self.LoginXpath).click()
        self.write_test_case_result('PASS', 'A1')
        print('Find login button: PASS')
    except:
        self.write_test_case_result('FAIL', 'A1')
        print('Find login button: FAIL')

    try:
        WebDriverWait(driver, 15).until(lambda driver: self.InboxXpath)
        driver.find_element_by_xpath(self.LogoXpath).click()
        self.write_test_case_result('PASS', 'A2')
        print('Find logo xpath: PASS')
    except:
        self.write_test_case_result('FAIL', 'A2')
        print('Find logo xpath: FAIL')

def write_test_case_result(self, result, location):
    wb = Workbook()
    ws1 = wb.worksheets[0]
    ws1.title = 'Test result'
    dest_filename = 'Test_Result.xlsx'

    while True:
        if result == "PASS":
            ws1.cell(location).value = "PASSED"
            break
        else:
            ws1.cell(location).value = "FAILED"
            break
        break
    # Save the file
    wb.save(filename = dest_filename)


def tearDown(self):
    self.driver.quit()

if __name__ == "__main__":
unittest.main()

person Dat Van    schedule 11.05.2015    source источник
comment
Можете ли вы объяснить, что вы имеете в виду, когда говорите 4 шага?   -  person ajd    schedule 11.05.2015
comment
Извини, я виноват! Шаг 1. Введите имя пользователя. Шаг 2. Введите пароль. Шаг 3. Нажмите кнопку входа. Шаг 4. Подождите, пока не появится логотип Gmail.   -  person Dat Van    schedule 11.05.2015
comment
@DatVan Я бы посоветовал вам использовать средство запуска тестов HTML: tungwaiyip.info/software/HTMLTestRunner.html , так что вы получите более подробные результаты, и это хорошая практика.   -  person karunakar sapogu    schedule 12.05.2015


Ответы (2)


Форматирование отключено, но я думаю, что вам не следует встраивать то, что по сути является кодом регистрации, в тестовый метод. test_Basic будет перезаписывать файл при каждом запуске, поэтому, по-видимому, он всегда имеет только один результат.

Попробуйте сначала написать свой тест только для использования модуля ведения журнала Python. Как только это заработает нормально, вы можете заменить объект ведения журнала некоторым кодом, который записывает файлы Excel.

person Charlie Clark    schedule 11.05.2015

Сначала установите openpyxl с помощью команды «pip install openpyxl», а затем создайте новый файл python и напишите ниже код:

from openpyxl import load_workbook

def userName(row_Num, cell_Num, sheet):
    wb = load_workbook('./test.xlsx')
    sheet = wb.get_sheet_by_name(sheet)
    username = sheet.cell(row=row_Num, column=cell_Num).value
    if username is not None:
        return username
    else:
        return '' #Null Value pass 

Теперь перейдите туда, где вы создали testScript, и импортируйте файл python, помните, что все файлы должны быть в одной папке, включая excellSheet.

 driver.find_element_by_xpath("//input[@id='user']").send_keys(userName(7,1,'Sheet1'))
 #Row num, Col Num, Sheet Name
person Shibu    schedule 04.05.2018