Python+Selenium自动化测试脚本(入门)

前言
最近在学习Python+selenium自动化测试,计划把公司已有一套自动化测试框架(UIAutomation+C#)用Python+Selenium框架实现一遍。先拿了一个csdn的登录页面练练手,并以此写个Demo,作为记录,同时也可以给刚入门的人一个参考。
操作:
自动化测试是根据手动操作的流程设计脚本,我们做登录操作也一样,首先打开登录网站,进入登录页面,输入用户名密码,点击登录按钮,页面跳转到已登录界面后,验证登录成功。具体步骤如下:
1.打开登录网站(https://www.csdn.net/)

class HomePageLogin(unittest.TestCase):    
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(8)
        self.driver.get('https://www.csdn.net/')

2.在登录首页,点击登录按钮,打开登录页面
(1) 点击登录按钮
self.driver.find_element_by_xpath(’//*[@id=“csdn-toolbar”]/div/div/ul/li[4]/a[1]’).click()
#通过xpath找到登录按钮元素,并点击。
在这里插入图片描述
(2)点击账号登录

  self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div[5]/ul/li[2]').click()

在这里插入图片描述
3.输入用户名密码
由于用户名密码有默认记忆的功能,登录过后,这个页面打开账号和密码不是空的,所以非首次登录需要先做个判断清空下输入框。

 # 清空默认记录的用户名,并输入新用户名    
    get_uid = self.driver.find_element_by_xpath('//*[@id="all"]') #获取用户名输入框元素
    get_uid.click()      # 点击用户名输入框,光标定位在用户名输入框
    get_uid_text = get_uid.get_attribute('text') # 获取输入框中字符的长度
    get_uid.send_keys(Keys.DOWN) # 使光标定位在最后一个字符后,方便做删除操作
    #判断,如果输入框内容不是空的话,根据字符长度删除输入框中的字符
    if get_uid_text is not None:
        for i in range(0, len(get_uid_text)):
            get_uid.send_keys(Keys.BACKSPACE)
    get_uid.send_keys('XXXXXXXXXX@163.com')  # 输入账号
    time.sleep(2)

考虑密码输入框同样方法处理,可以把清空输入框的方法做一个封装,如下:

  def clean_text(self, element, text):
        element.send_keys(Keys.DOWN)
        if text is not None:
            for i in range(0, len(text)):
                element.send_keys(Keys.BACKSPACE)

在这里插入图片描述
其它问题:
在输入完用户名后,发现因为有记忆功能,所以有个历史账号的选择下拉框,会导致无法定位到密码输入框中去,这个也需要处理掉,处理方法:敲换行键

 get_uid.send_keys(Keys.TAB)

4.点击登录按钮

self.driver.find_element_by_class_name('btn').click() #点击登录按钮

5.验证登录成功
正常情况下登录成功后页面跳转到登录首页,校验个人中心-个人账户ID是否是登录的账号来验证账号是否登录成功。(但是,我这边用自动化操作的话,系统会判断账号可能被盗,需要手机号做个验证,这块功能验证我手动跳过了)
在这里插入图片描述
点击个人中心,打开个人资料页面

 self.driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/ul/li[5]').click()
        self.driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/ul/li[5]/div[2]/div[1]/div[3]/a').click()

验证用户ID是否是本人ID

#调用验证函数
self.verify_login('ct745363083')
#验证是否是本人ID函数
  def verify_login(self, expected):
    actual = self.driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div/div/div[2]/div[1]/div/span').text
    result = bool(actual == expected)
    return result

**在摸索中学习,目前这个代码还有三个问题:
1.从网站主页(https://www.csdn.net/)点击登录按钮跳转到https://passport.csdn.net/login?code=public页面,点击账号登录,无法识别“账号登录”这个元素,但是直接从登录这个页面登录,可以识别该元素,所以,我就把下面代码中的登录页面由主页(https://www.csdn.net/)改成了(https://passport.csdn.net/login?code=public)
2.自动化登录,不知道为什么系统会判断账号可能被盗,会有一个手机号验证登录的过程,我把这块跳过了。
3.验证登录成功的页面,拿不到用户id(问题类型不确定是不是跟1相同,跳转过来的页面识别不到页面元素)

先这样吧,慢慢在学习中找到原因,如果有知道问题所在的,又碰巧看到我困惑的,还希望能帮忙给些指点。自动化的大概思路是这样,希望能给一些跟我一样小白的初级学习者一点帮助。
计划:接下来打算依据公司的一个项目把原来(UIAutomation+C#)框架改成Python+selenium自动化框架。试一试吧!

附上代码:

  # coding=utf-8
import unittest
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


class HomePageLogin(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(8)
        self.driver.get('https://passport.csdn.net/login?code=public')

    def test_login(self):
        #self.driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/ul/li[4]/a[1]').click()
        time.sleep(2)
        self.driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div[5]/ul/li[2]').click()
        time.sleep(2)
        # 清空默认记录的用户名,并输入新用户名
        get_uid = self.driver.find_element_by_xpath('//*[@id="all"]')
        get_uid.click()      # 点击用户名输入框
        get_uid_text = get_uid.get_attribute('text')
        get_uid.send_keys(Keys.DOWN)
        self.clean_text(get_uid, get_uid_text)
        get_uid.send_keys('XXXXXXXXX@163.com') #输入账号
        get_uid.send_keys(Keys.TAB)
        #清空默认记录的密码,并输入新密码
        get_pwd = self.driver.find_element_by_xpath('//*[@id="password-number"]')
        get_pwd.click()     #点击密码输入框
        get_pwd_text = get_pwd.get_attribute('text')
        self.clean_text(get_pwd, get_pwd_text)
        get_pwd.send_keys('XXXXXXXXX')  # 输入密码
        self.driver.find_element_by_class_name('btn').click() #点击登录按钮
        time.sleep(40)
        self.driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/ul/li[5]').click()
        self.driver.find_element_by_xpath('//*[@id="csdn-toolbar"]/div/div/ul/li[5]/div[2]/div[1]/div[3]/a').click()
        self.driver.get('https: // i.csdn.net /  # /uc/profile')
        self.verify_login('ct745363083')
        time.sleep(10)

    def clean_text(self, element, text):
        element.send_keys(Keys.DOWN)
        if text is not None:
            for i in range(0, len(text)):
                element.send_keys(Keys.BACKSPACE)

    def verify_login(self, expected):
        actual = self.driver.find_element_by_xpath('//*[@id="app"]/div/div[2]/div/div/div/div[2]/div[1]/div/span').text
        result = bool(actual == expected)
        return result


if __name__ == '__main__':
    unittest.main()
  • 16
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值