selenium+python实现用户登录的自动化测试代码

代码的目录结构如下:

目录结构.jpg

测试的对象是本地安装的禅道系统:

禅道.jpg

测试的结果如下:

邮件.jpg
报告.jpg

以下是测试代码:

driver.py

from selenium import webdriver
'''启动不同的浏览器启动'''
def browser():
    driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
    # driver=webdriver.Firefox()
    # driver=webdriver.ie()
    # driver.get('http://www.baidu.com')
    return  driver
if __name__ == '__main__':
    browser()

function,py

'''工具方法模块(截图,查找最新报告、邮件发送)'''
import os
import time
from selenium import webdriver
import smtplib                                  #发送邮件模块
from email.mime.text import MIMEText           #定义邮件内容
from email.header import Header                #定义邮件标题

#截图方法
def insert_img(driver,filename):
   # 获取当前模块所在路径
   print(__file__)
   func_path=os.path.dirname(__file__)
   print('func_path is %s'%func_path)
   #获取上一级目录
   base_dir=os.path.dirname(func_path)
   print("base_dir is %s" %base_dir)
   base_dir=str(base_dir)
   print(base_dir)
   # 获取项目文件的根目录路径
   base=base_dir.split('/website')[0]
   print(base)
   # 指定截图存放路径
   filepath=base+'/website/test_report/report/'+filename
   print(filepath)
   driver.get_screenshot_as_file(filepath)

def latest_report(report_dir):
    lists=os.listdir(report_dir)
    print(lists)
    lists.sort()
    print('file is :%s'%lists[-1])
    file=os.path.join(report_dir,lists[-1])
    fi=str(file)
    print('latest file is: %s'%fi)
    return file

#将测试报告发送到邮件
def send_email(latest_report):
        print('func_py latest report is %s'%latest_report)
        f=open(latest_report,'rb')
        mail_content=f.read()
        # 发送邮箱服务器
        smtpserver = 'smtp.163.com
        # 发送邮箱用户名密码
        user = '*********@163.com'
        password = '********'
        # 发送和接收邮箱
        sender = '*****@163.com'
        receives = [ '****@qq.com']
        # 发送邮件主题和内容
        subject = '自动化测试报告邮箱发送'
        msg = MIMEText(mail_content,'html','utf-8')
        msg['Subject'] = Header(subject,'utf-8')
        msg['From'] = sender
        msg['To'] = ','.join(receives)

        smtp = smtplib.SMTP_SSL(smtpserver, 465)
        smtp.helo(smtpserver)
        smtp.ehlo(smtpserver)
        smtp.login(user, password)
        print("Start send email..." )
        # smtp.sendmail(sender,receives,msgRoot.as_string())
        smtp.sendmail(sender, receives, msg.as_string())
        smtp.quit()
        print("Send email end!")

if __name__ == '__main__':
    # send_multi_email()
    driver = webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
    driver.get("http://www.sogou.com")
    time.sleep(2)
    insert_img(driver, "sogou.png")
    driver.close()

myuint.py


import unittest
from driver import driver
'''用例运行前后的环境准备工作'''
class StartEnd(unittest.TestCase):
    def setUp(self):
        self.driver=driver.browser()
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

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

BasePage.py

'''页面基类'''
from time import sleep

class  Page():

    def __init__(self,driver):
        self.driver=driver
        self.base_url='http://127.0.0.1:8080/'
        self.timeout=20

    def _open(self,url):
        url_=self.base_url+url
        print('url is %s'%url_)
        self.driver.maximize_window()
        self.driver.get(url_)
        sleep(2)
        assert self.driver.current_url == url_,'did not land on %s'%url_

    def open(self):
        self._open(self.url)

    def find_element(self,*loc):
         return self.driver.find_element(*loc)

login_page.py


from BasePage import *
from selenium import webdriver
from selenium.webdriver.common.by import By

class Login_Page(Page):
    '''登录页面'''
    url='zentao/user-login.html'
    # 定位器——对相关元素进行定位
    username_loc=(By.ID,'account')
    password_loc=(By.NAME,'password')
    submit_loc=(By.ID,'submit')

    def type_username(self,uname):
        self.find_element(*self.username_loc).clear()
        self.find_element(*self.username_loc).send_keys(uname)

    def type_password(self,pw):
        self.find_element(*self.password_loc).clear()
        self.find_element(*self.password_loc).send_keys(pw)

    def click_submit(self):
        self.find_element(*self.submit_loc).click()

    def login_action(self,uname,pw):
        self.open()
        self.type_username(uname)
        self.type_password(pw)
        self.click_submit()

    Login_pass_loc=(By.ID,'companyname')
    Login_fail_loc=(By.LINK_TEXT,'忘记密码')

    def type_login_pass_hint(self):
        return self.find_element(*self.Login_pass_loc).text

    def type_login_fail_hint(self):
        return  self.find_element(*self.Login_fail_loc).text

# if __name__=='__main__':
#     driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
#     po=Login_Page(driver)
#     po.login_action('admin','Aa1234')

test_login.py


'''
•   用户名密码正确点击登录
•   用户名正确,密码错误点击登录
•   用户名和密码为空点击登录
'''
import  unittest
from   website.testcase.model  import function,myuinit
from  website.testcase.page_object.login_page import *
from time import sleep

class LoginTest(myuinit.StartEnd):

    def test_login1_normal(self):
        '''用户名、密码正确'''
        print("test_login1_normal is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa1234')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")

    @unittest.skip('skp this case')
    def test_login2_password_error(self):
        '''用户名正确,密码错误'''
        print("test_login1_password error is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa123456')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")


    @unittest.skip('skip this case')
    def test_login3_empty(self):
        '''用户名、密码为空'''
        print("test_login1_normal is start run...")
        po=Login_Page(self.driver)
        po.login_action('admin','Aa1234')
        sleep(3)

        self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
        function.insert_img(self.driver,'login_success.png')
        print("test_login1_normal is test end!")

if __name__=='__main__':
    unittest.main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • 乘着改革开放的浪潮,这段时间我们终于接触到非常火热的前端项目构架React+Redux。 这个构架下的前端项目,最...
    大大灰灰狼阅读 4,838评论 5 10
  • 共修功课第十六天:婚姻是责任跟平衡,面对现实的问题,你是否承担起自己的责任,平衡到彼此之间的关系呢? 引导:婚姻是...
    王大梁_9fb7阅读 215评论 1 1
  • 近来都淹没在恋恋红尘之中,呵呵!基本上恢复到原来比较“正常”的样子,点开简书,可以说是无字可写… 人生之所有,一切...
    凤凰未涅槃阅读 195评论 0 1
  • 读书的时候,一边啜着什么含在嘴中会是一个很奇妙的过程。例如,之前有段时间,我总喜欢在看书的时候拆开一包糖果,每翻看...
    瓶蓋阅读 278评论 0 1