Selenium自动化测试实战1-基本使用
Posted 知奕奕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium自动化测试实战1-基本使用相关的知识,希望对你有一定的参考价值。
目录
Selenium WebDriver 基本使用
安装与测试
使用 pycharm 作为开发 IDE
请自行配置好 python 环境变量,避免因为多解释器的问题导致 pip 安装位置错误
安装 selenium 框架:pip install selenium
除此之外我们还需要安装对应浏览器的驱动(chrome、firefox、ie、opera、edge 等)
假如我们使用火狐,则百度搜索 selenium firefox driver
找到对应的 github 项目,下载 win64 版本的 zip 压缩包,解压后双击运行对应的驱动文件即可安装
打开 pycharm,新建一个文件,测试我们的第一个自动化脚本
脚本基本实现了:打开百度、找到指定元素、发送文本、模拟点击、退出,这么一个完整的流程
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").click()
driver.find_element(By.ID, "kw").send_keys("hello world")
driver.find_element(By.ID, "su").click()
driver.quit()
基本 API
获取浏览器信息
from selenium import webdriver
driver = webdriver.Chrome()
print("获取位置对象:", driver.get_window_position())
print("获取位置坐标x值:", driver.get_window_position()["x"])
print("获取位置坐标y值:", +driver.get_window_position()["y"])
print("获取大小对象:", driver.get_window_size())
print("获取宽度值", driver.get_window_size()["width"])
print("获取高度值", driver.get_window_size()["height"])
print("获取位置及大小对象:", driver.get_window_rect())
print("获取位置坐标x值:", driver.get_window_rect()["x"])
print("获取位置坐标y值:", driver.get_window_rect()["y"])
print("获取宽度值:", driver.get_window_rect()["width"])
print("获取高度值:", driver.get_window_rect()["height"])
查找页面元素
不建议使用 class 查找,因为 class 多有重名的情况,不唯一
# 按id、name、class、tag查找
driver.find_element_by_id("id属性值")
driver.find_element_by_name("name属性值")
driver.find_element_by_class_name("class属性值")
driver.find_element_by_tag_name("html标签名称")
# 按链接文本查找,即页面中a标签中的文本
driver.find_element_by_link_text("链接的文本")
# 按链接文本模糊查找
driver.find_element_by_partial_link_text("链接的一部分文本")
XPath 查找
基本表达式:
driver.find_element_by_xpath("XPath表达式")
索引或属性定位查找
driver.find_element_by_xpath("//span/input[1]") #选取第1个与表达式//span/input匹配的元素
driver.find_element_by_xpath("//span/input[last()]") #选取最后1个与表达式匹配的元素
driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("//input[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
函数或表达式定位
driver.find_element_by_xpath("//a[text()='hao123']") #查找文本为hao123的a元素
driver.find_element_by_xpath("//a[contains(@href,'www.hao123.com')]") #查找href属性
#包含www.hao123.com的a元素
driver.find_element_by_xpath("//a[contains(text(),'ao12')]")#查找文本包含ao12的a元素
driver.find_element_by_xpath("//a[starts-with(@href,'https://www.hao')]") #查找href
#属性以https://www.hao开始的a元素
CSS 选择器查找
# 层级定位
driver.find_element_by_css_selector("span > input")
# 关键属性定位
driver.find_element_by_css_selector("#kw") #符号"#"代表使用id匹配,即匹配id为kw的元素
# 属性模糊定位
driver.find_element_by_css_selector("[href^='https://www.hao']") #查找href属性值以
#https://www.hao开头的元素
driver.find_element_by_css_selector("[href$='123.com']") #查找href属性值以123.com结尾
#的元素
# 组合定位
driver.find_element_by_css_selector("span > input[class='s_ipt'][name='wd']") #查找
# 任意span下Class名称为s_ipt,Name属性为wd的input元素
By 对象查找
by 实现动态查找的功能,他需要预先导入 selenium 中的对应包
from selenium import webdriver
from selenium.webdriver.common.by import By # 记住导入这个包
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 根据类型自动查找
driver.find_element(By.ID, "kw")
driver.find_element(By.NAME, "wd")
driver.find_element(By.CLASS_NAME, "s_ipt")
driver.find_element(By.LINK_TEXT, "地图")
driver.find_element(By.PARTIAL_LINK_TEXT, "地")
driver.find_element(By.TAG_NAME, "input")
driver.find_element(By.XPATH, "//input[@id='kw']")
driver.find_element(By.CSS_SELECTOR, "#kw")
页面元素操作
# 单击
webElement.click()
# 向元素输入内容或上传附件
webElement.send_keys("要输入的内容")
# 清空元素内容
webElement.clear()
# 提交表单元素
webElement.submit()
# 下拉框操作
selectWebElement.select_by_visible_text("选项的文本") #按文本选择
selectWebElement.select_by_value("选项的值") #按选项值选择
selectWebElement.select_by_index(选项的索引) #按选项索引选择,索引从0开始
获取页面元素内容
# 获取元素选中状态
webElement.is_selected()
# 获取元素可编辑状态
webElement.is_enabled()
# 元素是否显示
webElement.is_displayed()
# 获取HTML属性
webElement.get_attribute("属性名称")
# 获取DOM属性
webElement.get_property("属性名称")
# 获取CSS属性
webElement.value_of_css_property("CSS属性名称")
webElement.location #获取位置对象
webElement.size #获取大小对象
webElement.rect #获取位置及大小对象
浏览器弹出框
首先通过以下代码获取 alert 对象后,才可以进行后续操作
driver.switch_to.alert
对 Alert 对象的操作(通过上面获取到对象后)
Alert.accept() #单击"确认"按钮
Alert.dismiss() #单击"取消"按钮
Alert.text # 获取文本
Alert.send_keys("要输入的内容")
Selenium自动化测试之基本控件使用
Selenium自动化测试之基本控件使用
1、输入框input:
在Html中样式:
<input id="username" type="text">
操作:
driver.findElement(By.id("username")).clear();
driver.findElement(By.id("username")).sendKeys("test");
说明:
clear表示清除输入框中的数据;
sendKeys表示向输入框中输入数据;
2、超链接
在Html中样式:
<a class="baidu" href="//www.baidu.com">baidu</a>
操作:
driver.findElement(By.xpath("//div[@id=‘link‘]/a")).click();
说明:
click表示点击操作;
3、下拉菜单
在Html中样式:
<select name="select">
<option value="m">M</option>
<option value="w">W</option>
</select>
操作:
WebElement element = driver.findElement(By.cssSelector("select[name=‘select‘]"));
Select select = new Select(element);
select.selectByValue("w");
select.selectByIndex(1);
select.selectByVisibleText("W");
说明:
下拉菜单通过select类调用
selectByValue通过调用value定位
selectByIndex通过option顺序定位
selectByVisibleText通过text值定位
4、单选
在Html中样式:
<input class="A" type="B" name ="C">
操作:
List<WebElement> elements = driver.findElements(By.name("C"));
elements.get(1).click;
boolean select = elements.get(1).isSelected();
说明:
get通过元素顺序定位元素
isSelected判断是否选中
5、多选
在Html中样式:
<input type="checkbox" name="Check">
操作:
List<WebElement> elements = driver.findElements(By.xpath("//div/input[@name=‘Check‘]"));
WebElement element = elements.get(2);
element.click();
boolean check = element.isSelected();
6、按钮
在Html中样式:
<input class="button" type="button" value="Submit">
操作:
WebElement element = driver.findElement(By.className("button"));
element.click();
boolean button = element.isEnabled();
说明:isEnabled表示检查按钮是否可用
以上是关于Selenium自动化测试实战1-基本使用的主要内容,如果未能解决你的问题,请参考以下文章
Selenium3与Python3实战 Web自动化测试框架
[Selenium自动化测试实战] 不打开浏览器如何进行WEB自动化测试