Python selenium 使用 openpyxl 将结果写入 excel 文件,但只有情况被写入 excel 文件
Python selenium using openpyxl to write result to excel file but there is only case is written to excel file
我上周才开始使用 Python 学习 Selenium,我写了一个包含 4 步的测试用例,在第 3 步和第 4 步如果这个 pass/fail 那么它会将结果写入 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()
格式已关闭,但我认为您不应该在测试方法中嵌入本质上是日志记录的代码。 test_Basic
每次 运行 都会覆盖文件,这大概就是为什么它只有一个结果的原因。
尝试编写您的测试,最初只是为了使用 Python 的日志记录模块。一旦这工作正常,您可以用一些写入 Excel 文件的代码替换日志记录对象。
首先,使用命令安装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
我上周才开始使用 Python 学习 Selenium,我写了一个包含 4 步的测试用例,在第 3 步和第 4 步如果这个 pass/fail 那么它会将结果写入 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()
格式已关闭,但我认为您不应该在测试方法中嵌入本质上是日志记录的代码。 test_Basic
每次 运行 都会覆盖文件,这大概就是为什么它只有一个结果的原因。
尝试编写您的测试,最初只是为了使用 Python 的日志记录模块。一旦这工作正常,您可以用一些写入 Excel 文件的代码替换日志记录对象。
首先,使用命令安装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