前言
最近在学习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').textresult = 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 Keysclass 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').textresult = bool(actual == expected)return resultif __name__ == '__main__':unittest.main()

Python+Selenium自动化测试脚本(入门)相关推荐

  1. Python selenium自动化测试框架入门--登录测试实例

    本文为Python自动化测试框架基础入门篇,主要帮助会写基本selenium测试代码又没有规划的同仁. 本文应用到POM模型.selenium.unittest框架.configparser配置文件. ...

  2. python写界面输入测试脚本,python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要 ...

  3. Python + Selenium 自动化测试《人生重开模拟器》

    原文 Python + Selenium 自动化测试<人生重开模拟器> 背景 最近有一款小游戏特别火,叫<人生重开模拟器>,这款游戏用黑色幽默的调侃形式,随机生成你的人生大事件 ...

  4. Selenium3自动化测试——1. 新建第一个Selenium自动化测试脚本

    在安装好Python.PyCharm和Selenium后,开始进行第一个Selenium自动化测试脚本. 1. 对百度首页进行编写如下代码: from selenium import webdrive ...

  5. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  6. Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)

    Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...

  7. python写自动化测试脚本常见报错_Appium自动化测试

    3.     Appium安装配置 3.1.  限制 如果你在windows上安装appium,你没法使用预编译专用于OS X的.app文件,你也将不能测试IOS apps,因为appium依赖OS ...

  8. 使用 XML 维护 Selenium 自动化测试脚本 ZT

    简介:软件自动化回归测试是软件工程实践中的重要发展趋势之一.目前业内主流的商业自动化测试工具和开放源代码测试工具,都需要自动化测试人员熟悉开发编程语言.但是过高的编程门槛让很大一部分优秀的业务测试人员 ...

  9. python+selenium自动化测试-Windows环境搭建

    来自python+selenium自动化测试初学者的笔记,写的不对的地方大家多多指教哦 一.安装selenium 安装selenium需要先安装python环境,python环境在之前的python+ ...

最新文章

  1. 【ASP.NET北大青鸟】-总结(二)
  2. android9.0首发机型,安卓9.0正式发布,EMUI开启多款机型同步内部测试
  3. 叫你两招编辑PDF文档的方法
  4. 艾伟:ASP.NET MVC,深入浅出IModelBinder,在Post方式下慎用HtmlHelper
  5. 谈谈离散卷积和卷积神经网络
  6. 正式启动|2020腾讯犀牛鸟云开发校园技术布道师养成计划
  7. 看下completablefuture(暂时没看完)
  8. 如何从JavaScript数组中获取多个随机唯一元素?
  9. linux错误自动报告工具,linux – 关闭abrt的电子邮件通知(自动错误报告工具)
  10. 如何实现文件下载进度条呢?
  11. java类静态初始化_Java静态代码块和类初始化、实例初始化过程
  12. 自适应对比度增强(ACE)算法原理及实现
  13. java 调用mysql视图_如何在java spring POJO类上注入和使用mysql视图代替表 . 是否可以使用视图...
  14. Windows下安装使用LAMMPS并运行例子
  15. HaaS EDU K1设备资源总体介绍
  16. 实现表格隔行变色研究
  17. C++ 线性表的结构体定义(顺序表和链式表)
  18. 湘潭大学2022软件工程程序设计实践平时练习一C/C++
  19. 啃完这些资料,我拿到了腾讯,爱奇艺,Kotlin从入门到进阶实战
  20. 自然语言处理的一些算法研究和实现(NLTK)

热门文章

  1. 送55本豆瓣高分高质量Python、数据分析、自动化测试书籍
  2. 剪切板上的隐私泄露,真的很严重
  3. 【C语言】逗号表达式
  4. 如何用计算机玩扫雷,扫雷怎么玩_玩好扫雷游戏的技巧是什么【图文】-太平洋电脑网PConline-太平洋电脑网...
  5. Java基础入门:IDEA软件安装和软件初始化设置
  6. MySQL报错问题:2509
  7. 世界计算机科学大会,【计算机视觉】世界三大顶级会议介绍
  8. 17岁少年捅死想要性侵女友的歹徒:我坐牢,也不能让她受伤
  9. acm刷题一些总结,至每一个努力拼搏的acmer
  10. html严格模式和标准模式,怎么触发这两种模式