白月黑羽教python之selenium:课后练习

最近自学了白月黑羽老师的自动化测试课程,并非课后作业的准确答案,只是为了个人学习记录,如有不足欢迎留言指点,谢谢大家。

前置条件,使用正确的管理员账号、密码登录白月SMS系统

# login_success.py

def login_success(driver, username, password):
    # 找到用户名输入正确用户
    element_username = driver.find_element_by_id('username')
    element_username.clear()
    element_username.send_keys(username)

    # 找到用户名输入正确用户
    element_password = driver.find_element_by_id('password')
    element_password.clear()
    element_password.send_keys(password)

    # 找到登录按钮并点击
    button_submit = driver.find_element_by_tag_name('button')
    button_submit.click()

测试用例中,每一条用例都有相同的测试步骤,即为成功登录SMS系统,故将其写为公共方法,减少代码量。

测试用例UI-0101截图及李光洙个人代码完成

在这里插入图片描述

# UI-0101.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0101
"""

from login_success import login_success
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(10)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')

# 实际结果
actual_result = ''

# 定位左侧菜单栏
elements = driver.find_elements_by_css_selector('.sidebar-menu span')
for element in elements[0:3]:

    actual_result += ''.join(element.text)

print('页面前三项菜单名称分别为: ', actual_result)
# 预期结果
expected_result = '客户药品订单'
print('预期结果为: ', expected_result)

# 通过try抛出异常进行断言判断
try:
    assert expected_result == actual_result
    print('UI_0101 PASS,实际结果与预期结果一致!')
except Exception as e:
    print('UI_0101 FAIL,实际结果与预期结果不一致!', format(e))

sleep(1)
driver.quit()

测试用例UI-0102截图及李光洙个人代码完成

在这里插入图片描述

# UI-0102.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0102
"""

from login_success import login_success
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(10)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')

# 创建客户
# 找到添加客户按钮并点击
customer_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
customer_button.click()
# 输入客户信息,客户名,联系电话,地址
customer_name = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(1) input')
customer_name.send_keys('南京中医院')
customer_mobile = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(2) input')
customer_mobile.send_keys('13370082190')
customer_address = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) textarea')
customer_address.send_keys('南京中医院110号')

# 点击创建按钮
create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(1)')
create_button.click()

# 点击取消按钮
sleep(1)
create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(2)')
create_button.click()


# 实际结果
actual_result = ''

# 取出列表中新增的客户信息
customer_info = driver.find_elements_by_css_selector('.content>div:nth-of-type(3) .search-result-item-field>span:nth-child(2)')
for element in customer_info:
    actual_result += ''.join(element.text)

print('列表中显示的客户信息为为: ', actual_result)

# 预期结果
expected_result = '南京中医院13370082190南京中医院110号'
print('预期结果为: ', expected_result)

# # 通过try抛出异常进行断言判断
try:
    assert expected_result == actual_result
    print('UI_0102 PASS,实际结果与预期结果一致!')
except Exception as e:
    print('UI_0102 FAIL,实际结果与预期结果不一致!', format(e))

sleep(1)
driver.quit()

测试用例UI-0103截图及李光洙个人代码完成

在这里插入图片描述

# UI-0103.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0103
"""

from login_success import login_success
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(10)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')


# 实际结果
actual_result = ''

# 定位左侧菜单栏
# 找到列表中用例0102新增的客户信息,点击编辑按钮
edit_customer = driver.find_element_by_css_selector('.content>div:nth-of-type(3) .search-result-item-actionbar label:nth-of-type(1)')
edit_customer.click()

# 修改客户名称
customer_name = driver.find_element_by_css_selector('.content>div:nth-of-type(3)>div>div:nth-of-type(1)>input')
customer_name.clear()
customer_name.send_keys('南京省中医院')

# 修改客户信息后点击确定
confirm_driver = driver.find_element_by_css_selector('.content>div:nth-of-type(3) .search-result-item-actionbar label:nth-of-type(1)')
confirm_driver.click()

# 等待客户信息更新
sleep(1)

# 取出列表中新增的客户信息
customer_info = driver.find_elements_by_css_selector('.content>div:nth-of-type(3) .search-result-item-field>span:nth-child(2)')
for element in customer_info:
    actual_result += ''.join(element.text)

print('列表中显示的客户信息为为: ', actual_result)

# 预期结果
expected_result = '南京省中医院13370082190南京中医院110号'
print('预期结果为: ', expected_result)

# # 通过try抛出异常进行断言判断
try:
    assert expected_result == actual_result
    print('UI_0103 PASS,实际结果与预期结果一致!')
except Exception as e:
    print('UI_0103 FAIL,实际结果与预期结果不一致!', format(e))

sleep(1)
driver.quit()

测试用例UI-0105截图及李光洙个人代码完成

在这里插入图片描述

# UI-0105.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0105
"""

from login_success import login_success
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(10)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')

# 创建药品
# 点击菜单栏药品,进入药品信息页面
medicines_menu = driver.find_element_by_css_selector('[href="#/medicines"]')
medicines_menu.click()

# 找到添加药品按钮并点击
medicines_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
medicines_button.click()

# 输入药品信息,药品名,编号,描述
medicines_name = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(1) input')
medicines_name.send_keys('感冒胶囊')
medicines_number = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(2) input')
medicines_number.send_keys('1005')
medicines_describe = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) textarea')
medicines_describe.send_keys('感冒胶囊用来治疗感冒有很好的效果')

# 点击创建按钮
create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(1)')
create_button.click()

# 点击取消按钮
sleep(1)
create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(2)')
create_button.click()


# 实际结果
actual_result = ''

# 取出列表中新增的药品信息
medicines_info = driver.find_elements_by_css_selector('.content>div:nth-of-type(3) .search-result-item-field>span:nth-child(2)')
for element in medicines_info:
    actual_result += ''.join(element.text)

print('列表中显示的药品信息为为: ', actual_result)

# 预期结果
expected_result = '感冒胶囊1005感冒胶囊用来治疗感冒有很好的效果'
print('预期结果为: ', expected_result)

# # 通过try抛出异常进行断言判断
try:
    assert expected_result == actual_result
    print('UI_0105 PASS,实际结果与预期结果一致!')
except Exception as e:
    print('UI_0105 FAIL,实际结果与预期结果不一致!', format(e))

sleep(1)
driver.quit()

测试用例UI-0106截图及李光洙个人代码完成

在这里插入图片描述

# UI-0106.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0106
"""

from login_success import login_success
from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(10)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')

# 最大化窗口页面
driver.maximize_window()

# 记录当前页面
# mainWindow变量保存当前窗口的句柄
mainWindow = driver.current_window_handle
url1 = driver.current_url
print('当前页面地址为: ', url1)

# 点击页脚处链接 白月黑羽教学使用,点击访问官网
link = driver.find_element_by_css_selector('.pull-right [href="http://www.python3.vip"]')
link.click()

sleep(1)

# 切换到白月黑羽官网教学页面
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if u'教Python' in driver.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break

# 实际结果
actual_result = ''

# 取出列表中新增的药品信息
menu_bar_list = driver.find_elements_by_css_selector('.navbar-nav .nav-item span')
for menu in menu_bar_list:
    actual_result += ''.join(menu.text)

print('导航菜单栏显示的信息为: ', actual_result)

# 预期结果
expected_result = 'Python基础Python进阶图形界面Web开发自动化测试性能测试常见问题其它'
print('预期的导航菜单栏结果为: ', expected_result)

# # 通过try抛出异常进行断言判断
try:
    assert expected_result == actual_result
    print('UI_0106 PASS,验证页面导航菜单栏显示的信息与预期结果一致!')
except Exception as e:
    print('UI_0106 FAIL,验证页面导航菜单栏显示的信息与预期结果不一致!', format(e))

# 通过前面保存的老窗口的句柄,自己切换到老窗口
driver.switch_to.window(mainWindow)
url2 = driver.current_url
print('返回页面地址为: ', url2)

# # 通过try抛出异常进行断言判断
try:
    assert url1 == url2
    print('UI_0106 PASS,验证返回到登录页面成功!')
except Exception as e:
    print('UI_0106 FAIL,验证返回到登录页面失败!', format(e))

sleep(1)
# 点击管理员
driver.find_element_by_css_selector('.user .dropdown-toggle').click()
# 点击退出登录
driver.find_element_by_css_selector('.user-footer .pull-right').click()

测试用例UI-0107截图

在这里插入图片描述
测试用例UI-0107与UI-0108相比,缺少了前置条件,删除系统中已有的信息,所以代码中不调用del_exist_info()方法即可。

测试用例UI-0108截图及李光洙个人代码完成

在这里插入图片描述

# UI-0108.py

"""
本段代码为测试’tcs-selenium.xlsx‘文件中管理员操作测试用例
测试用例内容为UI-0108
"""

from login_success import login_success
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome()
# 隐式等待最大10秒
driver.implicitly_wait(5)
# 打开待测试环境
driver.get('http://127.0.0.1/mgr/sign.html')

# 成功登录
login_success(driver, 'byhy', '88888888')


def del_exist_info():
    # 先找到系统中已经存在的信息,依次删除,然后再重新添加新的药品、客户、订单等信息
    def def_info():
        elements = driver.find_elements_by_css_selector('.search-result-item-actionbar label:nth-last-of-type(1)')
        if elements:
            for element in elements:
                element.click()
                driver.switch_to.alert.accept()
                sleep(0.5)

    # 先删除订单,因为订单关联药品和客户,若存在订单信息,则药品与客户信息将出现删除错误
    # 点击菜单栏订单,进入订单信息页面
    order_menu = driver.find_element_by_css_selector('[href="#/orders"]')
    order_menu.click()
    def_info()

    # 点击菜单栏药品,进入药品信息页面
    medicines_menu = driver.find_element_by_css_selector('[href="#/medicines"]')
    medicines_menu.click()
    def_info()

    # 点击菜单栏客户,进入客户信息页面
    customer_menu = driver.find_element_by_css_selector('[href="#/customers"]')
    customer_menu.click()
    def_info()


def create_medicines():
    # 创建药品
    # 点击菜单栏药品,进入药品信息页面
    medicines_menu = driver.find_element_by_css_selector('[href="#/medicines"]')
    medicines_menu.click()

    # 找到添加药品按钮并点击
    medicines_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
    medicines_button.click()

    # 依次添加3种药品
    medicines_data = [
        ['青霉素盒装1', 'YP-32342341', '青霉素注射液,每支15ml,20支装'],
        ['青霉素盒装2', 'YP-32342342', '青霉素注射液,每支15ml,30支装'],
        ['青霉素盒装3', 'YP-32342343', '青霉素注射液,每支15ml,40支装']
    ]

    for i in range(len(medicines_data)):
        # print(medicines_data[i][j])
        # 输入药品信息,药品名,编号,描述
        medicines_name = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(1) input')
        medicines_name.send_keys(medicines_data[i][0])
        medicines_number = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(2) input')
        medicines_number.send_keys(medicines_data[i][1])
        medicines_describe = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) textarea')
        medicines_describe.send_keys(medicines_data[i][2])

        # 点击创建按钮
        create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(1)')
        create_button.click()

        sleep(1)

    # 点击取消按钮
    sleep(1)
    create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(2)')
    create_button.click()

    print('药品添加成功')


def create_customer():
    # 创建客户
    # 点击菜单栏客户,进入客户信息页面
    customer_menu = driver.find_element_by_css_selector('[href="#/customers"]')
    customer_menu.click()

    # 找到添加客户按钮并点击
    customer_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
    customer_button.click()

    # 依次添加3个客户
    customer_data = [
        ['南京中医院1', '2551867851', '江苏省-南京市-秦淮区-汉中路-501'],
        ['南京中医院2', '2551867852', '江苏省-南京市-秦淮区-汉中路-502'],
        ['南京中医院3', '2551867853', '江苏省-南京市-秦淮区-汉中路-503']
    ]

    for i in range(len(customer_data)):
        # 找到添加客户按钮并点击
        customer_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
        customer_button.click()
        # 输入客户信息,客户名,联系电话,地址
        customer_name = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(1) input')
        customer_name.send_keys(customer_data[i][0])
        customer_mobile = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(2) input')
        customer_mobile.send_keys(customer_data[i][1])
        customer_address = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) textarea')
        customer_address.send_keys(customer_data[i][2])

        # 点击创建按钮
        create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(1)')
        create_button.click()

        sleep(1)

    # 点击取消按钮
    sleep(1)
    create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(2)')
    create_button.click()

    print('客户添加成功')


def create_order():
    # 创建订单
    # 点击菜单栏药品,进入订单信息页面
    order_menu = driver.find_element_by_css_selector('[href="#/orders"]')
    order_menu.click()

    # 找到添加客户按钮并点击
    customer_button = driver.find_element_by_css_selector('.content>.col-lg-12>button')
    customer_button.click()

    # 订单信息
    order_info = {'order_name': '李光洙的订单', 'customer': '南京中医院2', 'medicine': '青霉素盒装1', 'number': '100盒'}
    # 输入订单名称
    order_name = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(1) input')
    order_name.send_keys(order_info['order_name'])
    # 创建select对象,通过select对象选中 南京中医院2
    customer = Select(driver.find_element_by_css_selector('.col-lg-8 div:nth-child(2) select'))
    customer.select_by_visible_text(order_info['customer'])
    # 创建select对象,通过select对象选中 青霉素盒装1
    medicines = Select(driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) select'))
    medicines.select_by_visible_text(order_info['medicine'])
    # 选中药品后,输入药品数量
    sleep(1)
    medicines_number = driver.find_element_by_css_selector('.col-lg-8 div:nth-child(3) div input')
    medicines_number.send_keys(order_info['number'])

    # 点击创建按钮
    create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(1)')
    create_button.click()

    # 点击取消按钮
    sleep(1)
    create_button = driver.find_element_by_css_selector('.content>.col-lg-12>.col-lg-12 button:nth-child(2)')
    create_button.click()

    print('订单添加成功')


def check_order():
    # 取出列表中新增的订单信息
    order_name = driver.find_element_by_css_selector('.content>div:nth-of-type(3)>div:nth-of-type(1)>span:nth-child(2)')
    # 实际结果
    actual_result = order_name.text
    print('列表中显示的订单名称为: ', actual_result)

    # 预期结果
    expected_result = '李光洙的订单'
    print('预期结果为: ', expected_result)

    # # 通过try抛出异常进行断言判断
    try:
        assert expected_result == actual_result
        print('UI_0108 PASS,实际结果与预期结果一致,添加订单成功!')
    except Exception as e:
        print('UI_0108 FAIL,实际结果与预期结果不一致,添加订单失败!', format(e))


if __name__ == '__main__':
    del_exist_info()
    create_medicines()
    create_customer()
    create_order()
    check_order()

初入自动化测试没几天,故代码中很多地方写的比较幼稚,写博客的目的是为了帮助自己日后回顾,做一个学习记录,自己只是一个自动化测试领域的小学生,没有“为人师”的意思,仅此而已,欢迎大家批评指正,共同进步。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐