Selenium简介与使用教程&项目实战

Selenium简介与使用教程&项目实战

Scroll Down

作者:White Song

Blog: https://blog.yilon.top

cover selenium

介绍

相关文章:以后再有人问你selenium是什么,你就把这篇文章给他

如果有耐心,可以详细阅读上方文档,下面是精炼概要

如今,大多数软件应用都是跑在浏览器中的网站应用。不同公司和组织之间的测试效率迥异。在这个富交互和响应式处理随处可见的时代,很多组织都使用敏捷的方式来开发,因此测试自动化也成为软件项目的必备部分。测试自动化意味着使用软件工具来反复运行项目中的测试,并为回归测试提供反馈。

自动化测试,就是把手工进行的测试过程,转变成机器自动执行的测试过程。该过程,依旧是为了发现错误而执行。因此自动化测试的关键在于“自动化”三个字。自动化测试的内容,也就相应的转变成如何“自动化”去实现原本手工进行的测试的过程。

自动化测试可以涉及和试用的范围主要在以下方面:

  • 基于Web UI的浏览器应用的界面测试
  • 基于WebService或者WebAPI的服务契约测试
  • 基于WCF.net remotingSpring等框架的服务的集成测试
  • 基于APP UI的移动应用界面测试
  • 基于JavaC#等编程文件进行的单元测试

基于Web UI的自动化测试工具主要有两大类:付费的商业版工具和免费使用的开源版工具。典型的有两种:

  • UFT,QTP被惠普收购以后的新名称。
    • 通过程序的录制,可以实现测试的编辑
    • 录制的测试脚本是 VBScript 语法
    • 成熟版的商业付费工具
    • 工具比较庞大,对具体的项目定制测试有难度
  • SELENIUM,本次选择的开源工具
    • 本身不是测试工具,只是模拟浏览器操作的工具
    • 背后有 Google 维护源代码
    • 支持全部主流的浏览器
    • 支持主流的编程语言,包括:Java、Python、C#、PHP、Ruby、JavaScript等
    • 工具很小,可以实现对测试项目的定制测试方案
    • 基于标准的 WebDriver 语法规范

Selenium 是开源的自动化测试工具, 应该是最广泛使用的开源方案。它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web 的管理任务自动化。

Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。

教程

Selenium 中文文档

Selenium with Python中文翻译文档

以下是Python使用Selenium个人学习心得

webdriver使用配置

在使用WebDriver来操作浏览器时,请先下载相应的driver

from selenium import webdriver
driver = webdriver.Chrome()

各浏览器Driver下载地址

Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads
Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
Firefox:https://github.com/mozilla/geckodriver/releases
Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

使用时可直接指定driver的路径,也可将路径添加到浏览器的Application目录下,然后将该路径添加到PATH中.

from selenium import webdriver
driver = webdriver.Chrome("./chromedriver")

实战

使用Python + Selenium,自动发布博客文章。

文章格式建议为Markdown格式。

发布个人博客

博客简介

  • 博客名称: 风吟
  • 使用Halo开源框搭建,使用主题为寒山
  • 此博客为个人技术学习分享所建,欢迎来踩踩~(* ̄︶ ̄)

相关代码

测试文件

元数据最好设置成yaml格式

---
title: 自动发布测试文章
date: 2020-03-20
categories: ["测试"]
summary: "摘要信息"
author: White Song
tags: ["标签"]
cover: https://img.yilon.top/blog/cld3w.jpg
blog: https://blog.yilon.top
---

### 自动发布

自动发布文章正文测试。。

### 参考地址

> [分吟 - 博客](https://blog.yilon.top/)

主入口

核心方法

代码太多,在这里就不粘贴了。

详细可见Github地址:blog-auto-sender

常见问题汇总

  1. 可以使用get_attribute方法进行调试

    button = self.driver.find_element_by_xpath("//button[@type='button']")
    button.get_attribute("class")
    
  2. 编写前可以先考虑人的正常操作,然后执行相应的步骤。如鼠标悬停

    ActionChains(self.driver).move_to_element(ele).perform()
    
  3. 打开本地html文件

    from selenium import webdriver
    
    driver = webdriver.Firefox(executable_path="data/driver/geckodriver")
    driver.get("file://${文件绝对路径}")
    
  4. find_element_by_xpath方法元素是从下标1开始。

  5. 对于ajax等需要异步请求的组件,使用WebDriverWait, 才可以正确取到元素

  6. 让当前的元素滚动到浏览器窗口的可视区域内。

    #当传入参数为分别为true与false时,当点击右侧的按钮时,红色的div会贴近可视区域的顶部或底部。
    self.driver.execute_script("arguments[0].scrollIntoView(false);", button)
    
  7. 由于某些编辑器对输入有自动格式化,可通过模拟复制粘贴的方式解决

    # 前置安装
    pip install --upgrade --force-reinstall PyObjC PyObjC-core
    
    # 若安装不了,请使用安装包:python setup.py install
    # https://github.com/SavinaRoja/PyUserInput/wiki/Installation
    pip install PyUserInput
    
    
    pyperclip.copy(self.content)
    k = pykeyboard.PyKeyboard()
    ele_edit.send_keys(Keys.CONTROL, 'a')
    ele_edit.send_keys(Keys.RETURN)
    time.sleep(1)
    # ele_edit.send_keys(Keys.CONTROL, 'v')
    k.press_keys(['Command', 'v'])
    k.press_keys(['Return'])
    time.sleep(1)
    
  8. 在python执行过程中,提示selenium.common.exceptions.WebDriverException: Message: TypeError: can't access dead object
    原因是代码中用到了frame,获取元素前需要切换到frame才能定位到元素,否则无法定位到元素.

    在查找元素前加一句driver.switch_to_default_content() 退出frame

    self.driver.switch_to.default_content()  # 退出frame,没有这一句后续的元素定位会出错
    rite_blog = WebDriverWait(self.driver, 
    self.timeout).until(lambda d: d.find_element_by_xpath("/html/body/div[1]/div/div/ul/li[@class='write-bolg-btn']/a"))
    

项目地址

Github地址:blog-auto-sender