教你怎么用python selenium实现自动化测试

这篇具有很好参考价值的文章主要介绍了教你怎么用python selenium实现自动化测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安装selenium

打开命令控制符输入:pip install -U selenium

火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能

Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,下载地址:Selenium IDE – Get this Extension for 🦊 Firefox (en-US)

如何使用IDE录制脚本:点击seleniumIDE——点击录制——开始录制——录制完成后点击文件Export Test Case——python/unittest/Webdriver——保存;

二、安装python

安装的时候,推荐选择“Add exe to path”,将会自动添加Python的程序到环境变量中。然后可以在命令行输入 python -V 检测安装的Python版本。

浏览器内壳:IE、chrome、FireFox、Safari

1、webdriver:用unittest框架写自动化用例(setUp:前置条件,tearDown清场) 

1

2

3

4

5

6

7

8

9

10

import unittest

from selenium import webdriver

  

class Ranzhi(unittest.TestCase):

  def setUp(self):

    self.driver = webdriver.Firefox() #选择火狐浏览器

  def test_ranzhi(self):

    pass

  def tearDown(self):

    self.driver.quit()#退出浏览器

2、断言,检查跳转的网页是否和实际一致

断言网址时需注意是否为伪静态(PATH_INFO)或者GET,前者采用路径传参数(sys/user-creat.html),后者通过字符查询传参数(sys/index.php?m=user&f=index)

当采用不同方式校验网址会发现变化。

1

2

self.assertEqual("http://localhost:8080/ranzhi/www/s/index.php?m=index&f=index",

        self.driver.current_url, "登录跳转失败")

教你怎么用python selenium实现自动化测试,python,selenium,软件测试,接口测试,自动化测试,测试工程师

3、定位元素,在html里面,元素具有各种各样的属性。我们可以通过这样唯一区别其他元素的属性来定位到这个元素.

WebDriver提供了一系列的元素定位方法。常见的有以下几种:id,name,link text,partial link text,xpath,css seletor,class,tag.

1

2

3

self.driver.find_element_by_xpath('//*[@id="s-menu-superadmin"]/button').click()

self.driver.find_element_by_id('account').send_keys('admin')

self.driver.find_element_by_link_text(u'退出').click()

定位元素需注意的问题:

a.时间不够,采用两种方式(self.implicitly_wait(30),sleep(2))

b.函数嵌套(<iframe></iframe>)

1

2

3

4

# 进入嵌套

 self.driver.switch_to.frame('iframe-superadmin')

#退出嵌套

 self.driver.switch_to.default_content()

c.flash,验证码(关闭验证码或使用万能码)

d.xpath问题:最好采用最简xpath,当xpath中出现li[10]等时需注意,有时页面定位会出现问题

4、采用CSV存数据

CSV:以纯文本形式存储表格数据(数字和文本),CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

1

2

3

melody101,melody101,m,1,3,123456,@qq.com

melody102,melody101,f,2,5,123456,@qq.com

melody103,melody101,m,3,2,123456,@qq.com

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

import csv

# 读取CSV文件到user_list字典类型变量中

user_list = csv.reader(open("list_to_user.csv", "r"))

# 遍历整个user_list

for user in user_list:

  sleep(2)

  self.logn_in('admin', 'admin')

  sleep(2)

  # 读取一行csv,并分别赋值到user_to_add 中

  user_to_add = {'account': user[0],

          'realname': user[1],

          'gender': user[2],

          'dept': user[3],

          'role': user[4],

           'password': user[5],

           'email': user[0] + user[6]}

   self.add_user(user_to_add)

5、对下拉列表的定位采用select标签

1

2

3

4

5

6

from selenium.webdriver.support.select import Select

# 选择部门

dp =self.driver.find_element_by_id('dept')

Select(dp).select_by_index(user['dept'])

# 选择角色

Select(self.driver.find_element_by_id('role')).select_by_index(user['role'])

6、模块化代码

需要对自动化重复编写的脚本进行重构(refactor),将重复的脚本抽取出来,放到指定的代码文件中,作为共用的功能模块。使用模块化代码注意需倒入该代码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#模块化代码后引用,需导入代码模块

from ranzhi_lib import RanzhiLib

self.lib = RanzhiLib(self.driver)

# 点击后台管理

self.lib.click_admin_app()

sleep(2)

# 点击添加用户

self.lib.click_add_user()

# 添加用户

self.lib.add_user(user_to_add)

sleep(1)

# 退出

self.lib.logn_out()

sleep(2)

7、自定义函数运行的先后顺序:完整的单元测试很少只执行一个测试用例,开发人员通常都需要编写多个测试用例才能对某一软件功能进行比较完整的测试,这些相关的测试用例称为一个测试用例集,在PyUnit中是用TestSuite类来表示,采用unittest.TestSuite()。

PyUnit使用TestRunner类作为测试用例的基本执行环境,来驱动整个单元测试过程。Python开发人员在进行单元测试时一般不直接使用TestRunner类,而是使用其子类TextTestRunner来完成测试。

1

2

3

4

5

6

7

8

# 构造测试集

suite = unittest.TestSuite()

suite.addTest(RanzhiTest("test_login"))

suite.addTest(RanzhiTest("test_ranzhi"))

   

# 执行测试

runner = unittest.TextTestRunner()

runner.run(suite)

以下代码为登录“然之系统”,进入添加用户,循环添加用户并检测添加成功,再退出的过程。以下程序分别为主程序,模块化程序,执行程序,CSV文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

import csv

import unittest

from time import sleep

  

from selenium import webdriver

# 模块化代码后引用需导入代码模块

from ranzhi_lib import RanzhiLib

  

  

class Ranzhi(unittest.TestCase):

  def setUp(self):

    self.driver = webdriver.Firefox()

    self.lib = RanzhiLib(self.driver)

  

  # 主函数

  def test_ranzhi(self):

    # 读取CSV文件到user_list字典类型变量中

    user_list = csv.reader(open("list_to_user.csv", "r"))

    # 遍历整个user_list

    for user in user_list:

      sleep(2)

      self.lib.logn_in('admin', 'admin')

      sleep(2)

      # 断言

      self.assertEqual("http://localhost:8080/ranzhi/www/sys/index.html",

               self.driver.current_url,

               '登录跳转失败')

      # 读取一行csv,并分别赋值到user_to_add 中

      user_to_add = {'account': user[0],

              'realname': user[1],

              'gender': user[2],

              'dept': user[3],

              'role': user[4],

              'password': user[5],

              'email': user[0] + user[6]}

      # 点击后台管理

      self.lib.click_admin_app()

      # 进入嵌套

      self.lib.driver.switch_to.frame('iframe-superadmin')

      sleep(2)

      # 点击添加用户

      self.lib.click_add_user()

      # 添加用户

      self.lib.add_user(user_to_add)

      # 退出嵌套

      self.driver.switch_to.default_content()

      sleep(1)

      # 退出

      self.lib.logn_out()

      sleep(2)

      # 用新账号登录

      self.lib.logn_in(user_to_add['account'], user_to_add['password'])

      sleep(2)

      self.lib.logn_out()

      sleep(2)

  

  def tearDown(self):

    self.driver.quit()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

from time import sleep

  

from selenium.webdriver.support.select import Select

  

  

class RanzhiLib():

  # 构造方法

  def __init__(self, driver):

    self.driver = driver

  

  # 模块化添加用户

  def add_user(self, user):

    driver = self.driver

    # 添加用户名

    ac = driver.find_element_by_id('account')

    ac.send_keys(user['account'])

    # 真实姓名

    rn = driver.find_element_by_id('realname')

    rn.clear()

    rn.send_keys(user['realname'])

    # 选择性别

    if user['gender'] == 'm':

      driver.find_element_by_id('gender2').click()

    elif user['gender'] == 'f':

      driver.find_element_by_id('gender1').click()

    # 选择部门

    dp = driver.find_element_by_id('dept')

    Select(dp).select_by_index(user['dept'])

    # 选择角色

    role = driver.find_element_by_id('role')

    Select(role).select_by_index(user['role'])

    # 输入密码

    pwd1 = driver.find_element_by_id('password1')

    pwd1.clear()

    pwd1.send_keys(user['password'])

  

    pwd2 = driver.find_element_by_id('password2')

    pwd2.send_keys(user['password'])

    # 输入邮箱

    em = driver.find_element_by_id('email')

    em.send_keys(user['email'])

    # 点击保存

    driver.find_element_by_id('submit').click()

    sleep(2)

  

  # 登录账号

  def logn_in(self, name, password):

    driver = self.driver

    driver.get('http://localhost:8080/ranzhi/www')

    sleep(2)

  

    driver.find_element_by_id('account').clear()

    driver.find_element_by_id('account').send_keys(name)

    driver.find_element_by_id('password').clear()

    driver.find_element_by_id('password').send_keys(password)

    driver.find_element_by_id('submit').click()

    sleep(2)

  

  # 退出账号

  def logn_out(self):

    self.driver.find_element_by_id('start').click()

    sleep(4)

    self.driver.find_element_by_link_text(u'退出').click()

    sleep(3)

  

  # 点击后台管理

  def click_admin_app(self):

    self.driver.find_element_by_xpath('//*[@id="s-menu-superadmin"]/button').click()

    sleep(1)

  

  def click_add_user(self):

    self.driver.find_element_by_xpath('//*[@id="shortcutBox"]/div/div[1]/div/a/h3').click()

    sleep(3)

1

2

3

4

5

6

7

8

9

10

11

12

import unittest

  

from ranzhi import Ranzhi

class RanzhiTestRunner():

  def run_tests(self):

    suite = unittest.TestSuite()

    suite.addTest(Ranzhi('test_ranzhi'))

    runner = unittest.TextTestRunner()

    runner.run(suite)

if __name__ == "__main__":

  ranzhi_test_runner = RanzhiTestRunner()

  ranzhi_test_runner.run_tests()

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

教你怎么用python selenium实现自动化测试,python,selenium,软件测试,接口测试,自动化测试,测试工程师

教你怎么用python selenium实现自动化测试,python,selenium,软件测试,接口测试,自动化测试,测试工程师文章来源地址https://www.toymoban.com/news/detail-782147.html

到了这里,关于教你怎么用python selenium实现自动化测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python+selenium实现UI自动化(一)

    selenium官方网站 selenium ide 录制工具。 火狐/google/edge插件 selenium webdriver   结合代码来编写自动化用例。提供很多在浏览器上的操作的api,本文主要记录此项的学习过程 selenium grid   分布式。火狐/google/edge上同时运行。把所有用例拆分到多设备上运行,运行效率更高,更快。

    2023年04月24日
    浏览(42)
  • Python利用Selenium实现自动化验证登录

    Python里面使用Selenium是一个很重要的自动化测试模块,我们可以用它写一个验证登录脚本,有了这个可以用来保存cookie信息等,下面是一个简单的demo:

    2024年02月15日
    浏览(44)
  • 拥抱自动化测试,快速升职加薪丄Selenium+Pytest自动化测试框架教你如何做到

    引言 Selenium+Pytest自动化测试框架是目前最流行的自动化测试工具之一,其强大的功能和易用性援助许多开发人员和测试人员。 selenium自动化+ pytest测试框架禅道实战 选用的测试网址为我电脑本地搭建的禅道 conftest.py更改 config.ini更改 conf.py更改 page更改 page_element更改 page_obje

    2023年04月24日
    浏览(74)
  • 演唱会门票抢不到?不要慌,教你用python实现自动化抢票

    之前一直在更新从零开始学python系列的系列文,最近有点忙停更了两天,今天来插一篇其他的文章。 之前有小伙伴留言说女朋友快生日了,喜欢某某某但是手动买票根本就是买不到,又不想当大冤种从黄牛手里加钱,于是乎在疯狂星期四的晚上遭到’‘贿赂’\\\'的我连夜搞定

    2024年02月15日
    浏览(44)
  • selenium python 实现基本自动化测试的示例代码

    安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回放功能,IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开

    2024年02月02日
    浏览(53)
  • 使用Python+selenium实现第一个自动化测试脚本

    这篇文章主要介绍了使用Python+selenium实现第一个自动化测试脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 最近在学web自动化,记录一下学习过程。 此处我选用python3.6+selenium3.0,均用

    2024年02月03日
    浏览(56)
  • jenkins+selenium+python实现web自动化测试

    jenkins+selenium可以做到对web自动化的持续集成。 Jenkins的基本操作: 新建视图: 新建job: 可以选择构建一个自由风格的软件项目或者复制已有的item 安装Jenkins插件, SSH plugin ,Email Extension Plugin , Hudson Seleniumhq plugin 点击系统管理-管理插件 在可选插件面板Filter中输入插件名,

    2024年02月02日
    浏览(55)
  • Python自动化测试5大框架类型,你怎么Python实现自动化测试?

    我们需要一个什么样的框架 既然要搭一个框架,我们首先得弄明白我们需要一个什么样的框架,这个框架要支持什么功能? 框架主要的作用就是帮助我们编写更加简单而且好维护的用例,让我们把主要精力放在测试用例的设计上,那么我们就需要把所有额外的东西抽象出来

    2024年02月06日
    浏览(59)
  • 基于python实现Web自动化测试(selenium)、API自动化测试(requests)&附学习视频

    另一篇文章 :自动化测试框架(pytest)附学习视频 学习视频,学习文档-白月黑羽 说明: 1紧跟着写的不加/,不加空格-表示同一级别信息,加空格表示后代 2.css定位tag,id,class时分别有不同的标识,其他属性都要加[]进行搜索, Xpath所有属性都要都加【】,tag不用 3. css在使用ta

    2024年02月03日
    浏览(102)
  • Python Selenium实现自动化测试及Chrome驱动使用!

    本文将介绍如何使用Python Selenium库实现自动化测试,并详细记录了Chrome驱动的使用方法。 通过本文的指导,读者将能够快速上手使用Python Selenium进行自动化测试。 并了解如何配置和使用Chrome驱动来实现更高效的自动化测试。 一、Python Selenium简介 Python Selenium是一个用于Web应用

    2024年03月10日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包