Selenium自动化测试
1 什么是selenium
其实selenium就是一个自动化的工具,它里边包含着API以及很多自动化工具。这里讲述的就是我最近接触的WebDriver语言绑定和各个浏览器控制代码的实现(说白了,就是运行一个文件,浏览器会自己打开并且自己进行下一步操作)。WebDriver 以本地化方式驱动浏览器,就像用户在本地或使用 Selenium 服务器的远程机器上所做的那样,这标志着浏览器自动化的飞跃。
1.1 安装
pip install selenium
1.2 浏览器驱动
这个驱动呢,你得先看看你使用的是什么浏览器,目前它只有Chrome,Edge,Firefox,IE,Safari浏览器,根据自己使用的浏览器去安装驱动。
# 导包
from selenium import webdriver
# 绑定浏览器驱动
driver = webdriver.Chrome(executable_path="chromedriver.exe")
# 获取要操作的网址
driver.get("操作的网址")
# 最大化窗口
driver.maximize_window()
2 语法
根据HTML里有的属性来定位该元素。find_element_by 和 find_elements_by 的区别就是,前者返回的是单个的对象,后者返回的是一个列表
2.1 input 输入
例如:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
这里可以使用 xpath,id,name,class和标签名来对input框进行定位
# 根据 id 来定位
driver.find_element_by_id("kw")
driver.find_elements_by_id("kw")
# 根据 name 来定位
driver.find_element_by_name("wd")
driver.find_elements_by_name("wd")
# 根据 class 来定位
driver.find_element_by_class_name("s_ipt")
driver.find_elements_by_class_name("s_ipt")
# 根据 标签名 来定位
driver.find_element_by_tag_name("input")
driver.find_elements_by_tag_name("input")
# 根据 xpath 来定位 @后面可以跟name,class等
driver.find_element_by_xpath("//input[@name='wd']")
定位完之后,要往输入框里输入文字,使用的呢就是 send_keys 这个关键字。
# 获取webdriver对象
element = driver.find_elements_by_id("kw")
# 使用 send_keys 来输入自己想要的内容
element.send_keys("要输入的内容")
或者也可以连在一起写
# 获取webdriver对象,使用 send_keys 来输入自己想要的内容
driver.find_elements_by_id("kw").send_keys("要输入的内容")
2.2 click 点击事件
在selenium.webdriver里能触发click事件的,不只是有button,还有div,label等。它们跟上面的也是一样的定位方法,不过我个人比较推荐的是 xpath 的方法。因为这个方法比较准。这里呢就用 xpath 的方式来定位 button,然后进行click
<button type="button" class="button" >搜索</button>
定位
# 使用 xpath 的方式进行定位
element = driver.find_element_by_xpath("//button[@class='button']")
# 使用 click() 来进行点击
element.click()
当然,也可以连起来写
# 使用 xpath 的方式进行定位,使用 click() 来进行点击
driver.find_element_by_xpath("//button[@class='button']").click()
2.3 select 选择器
其实 select 的定位与前面的定位方式都是大差不差的,只是之后 options 里边选项的内容得做一下处理。这里呢有一个包是专门来处理选择器的也就是Select
<select id="sid" onchange="selectcity()">
<option>---请选择---</option>
<option>湖南</option>
<option>湖北</option>
<option>浙江</option>
<option>广东</option>
</select>
使用 Select 来进行处理
from selenium.webdriver.support.ui import Select
import random
# 使用 xpath 来定位元素
element = driver.find_element_by_xpath("//select[@id='sid']")
# 使用 Select 来对 select中的option进行处理
# 获取下拉框
select = Select(element)
# 获取下拉框中所有选项
options = select.option
# 先生成一个随机的选项值
rand_index = random.randint(0, len(options) - 1)
# 选中这个选项值
select.select_by_index(rand_index)
如果你知道选项的值的,也根据select_by_visible_text()来进行选择
select.select_by_visible_text(value)
3 难点
1. 一样的标签名里,属性都一样,只有显示的文字不一样
遇到这种情况呢,如果你想要选择其中一个呢,你可以给 xpath 后面加一个[数字],看看你想要选的是第几个。或者可以先把一样内容的元素定位出来使用 ‘find_elements_by_xpath’ 这样的话,返回的就是一个列表。根据列表的长度来
随机选择。