300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Python+Selenium自动化测试脚本(入门)

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

时间:2020-10-05 07:15:52

相关推荐

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

前言

最近在学习Python+selenium自动化测试,计划把公司已有一套自动化测试框架(UIAutomation+C#)用Python+Selenium框架实现一遍。先拿了一个csdn的登录页面练练手,并以此写个Demo,作为记录,同时也可以给刚入门的人一个参考。

操作:

自动化测试是根据手动操作的流程设计脚本,我们做登录操作也一样,首先打开登录网站,进入登录页面,输入用户名密码,点击登录按钮,页面跳转到已登录界面后,验证登录成功。具体步骤如下:

1.打开登录网站(/)

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

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@') # 输入账号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').textresult = bool(actual == expected)return result

**在摸索中学习,目前这个代码还有三个问题:

1.从网站主页(/)点击登录按钮跳转到/login?code=public页面,点击账号登录,无法识别“账号登录”这个元素,但是直接从登录这个页面登录,可以识别该元素,所以,我就把下面代码中的登录页面由主页(/)改成了(/login?code=public)

2.自动化登录,不知道为什么系统会判断账号可能被盗,会有一个手机号验证登录的过程,我把这块跳过了。

3.验证登录成功的页面,拿不到用户id(问题类型不确定是不是跟1相同,跳转过来的页面识别不到页面元素)

先这样吧,慢慢在学习中找到原因,如果有知道问题所在的,又碰巧看到我困惑的,还希望能帮忙给些指点。自动化的大概思路是这样,希望能给一些跟我一样小白的初级学习者一点帮助。

计划:接下来打算依据公司的一个项目把原来(UIAutomation+C#)框架改成Python+selenium自动化框架。试一试吧!

附上代码:

# coding=utf-8import unittestimport timefrom selenium import webdriverfrom mon.keys import Keysclass HomePageLogin(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(8)self.driver.get('/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@') #输入账号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: // / # /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').textresult = bool(actual == expected)return resultif __name__ == '__main__':unittest.main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。