selenium webDriver的运用
声明实例运行浏览器
配置浏览器驱动后,可以通过简单的2行代码就可以驱动浏览器(配置这里不加赘述)
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
1.简单操作
1.1浏览器操作

driver.back()#后退
driver.forward()#前进
driver.refresh()#刷新
1.2浏览器窗口操作

driver.maximize_window()#浏览器最大化窗口
driver.minimize_window()#浏览器最小化窗口
driver.close()#关闭浏览器
driver.set_window_position(坐标X,坐标Y) #移动浏览器到坐标位置
driver.set_window_size(宽度像素,高度像素)#讲浏览器窗口设置指定大小
driver.set_window_rect(坐标X,坐标Y,宽度像素,高度像素)#将浏览器窗口移动到指定位置,同时设置窗口大小
1.3获取浏览器信息
print(driver.title) #百度一下,你就知道
print(driver.current_url) #https://www.baidu.com/
#获取位置对象
driver.get_window_position()
#获取大小对象
driver.get_window_size()
#获取位置和大小对象
driver.get_window_rect()
2查找页面元素
#基本查找元素
from selenium.webdriver.common.by import By driver.find_element(By.ID,"kw").send_keys("")
driver.find_element(By.NAME,"wd").send_keys("")
driver.find_element(By.LINK_TEXT,"新闻").click()
xpath表达式
3元素基本操作
click
通常用于单击按钮(<button/>、<input type="reset"/>、<input type="submit">)、链接(<a/>)、单选框(<input type="radio"/>)、复选框(<input type="checkbox"/>)等元素,但实际上对于页面上任何可见的元素,都可用click函数单击
send_keys
该函数一般用于输入框元素(<input type="text"/><input type="password"/><textarea/>)或文件上传元素(<input type="file"/>),但理论上可以对任何可输入元素进行操作。
clear
和send_keys函数类似,clear函数多用于输入框元素。例如在百度搜索页面,我们可以先在百度搜索文本框中填入关键字,然后搜索。如果之后要再搜索其他关键字,就需要执行clear函数,先清空文本再输入关键字
下拉框
下拉框分为单选下拉框(<Select/>)和多选列表框(<Select multiple= "multiple"/>)
from selenium.webdriver.support.select import Select
sel=Select(driver.find_element(By.NAME,"cat_id"))
sel.select_by_value("页面元素value数字")
sel.select_by_index("使用下标")
sel.select_by_visible_text("根据文本选择")
sel.deselect_all()#取消所有选
获取元素的基本属性
from selenium.webdriver.common.by import By
baiduNewsLink = driver.find_element(By.XPATH,"//*[text()='新闻']")
print(baiduNewsLink.text)#文本值
print(baiduNewsLink.tag_name)#标签类型
print(baiduNewsLink.is_selected())#元素是否选中
print(baiduNewsLink.is_enabled())#元素是否可以编辑
print(baiduNewsLink.is_displayed())#元素是否已经显示
处理浏览器弹框
弹窗一共有三类:alert(只有确定),confirm(有确定又取消),prompt(有确定有取消还可以输入值) alert不是一个方法是一个属性
ale=driver.switch_to.alert
ale.accept()#点击确定
ale.dismiss()#点击取消
多网页切换
print(driver.current_window_handle)#打印当前正在操作的浏览器句柄
print(driver.window_handles)#打印实例下的所有句柄
driver.switch_to.window(driver.window_handles[0])#切换到第一个窗口句柄
4等待机制
通过函数设置等待的超时时间
driver.set_page_load_timeout(最长等待秒数)
改函数是全局设置,在整个实例周期都会生效
强制等待
强制等待很简单,直接使用PYthon的time函数即可
如下表示3秒延迟
import time
time.sleep(3)
缺点:处理起来毫无弹性
元素级等待机制——隐式等待
这是Selenium最初版本就支持的等待方式。它的作用是在执行find_element...这类函数时增加一个宽限时间,它决定了查找元素时的最长等待时间
driver.implicitly_wait(等待秒数)
缺点:
- 全局使用
- 如果某个元素未定位到会完整的等待设置的最长时间,减缓了执行速度
- 很多页面有较多的异步刷新和操作,很多元素是动态的,都需要等待,用隐式也不太好
元素级等待机制——显式等待
元素级等待机制的最佳实践方式是显式等待,它是一种相当完美的等待机制。只需要指定条件判断函数,Selenium会每隔一定时间检测该条件是否成立。如果成立,就立刻执行下一步;否则,一直等待,直到超过最大等待时间,抛出超时异常
WebDriverWait(实例,超时秒数,检测时间间隔默认0.5秒)
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
#这种场景下更适合使用Lambda表达式定义匿名函数
# WebDriverWait(driver,10).until(条件判断函数:等待到条件判断函数返回True)
# WebDriverWait(driver,10).until_not(条件判断函数:等待到条件判断函数返回False)
WebDriverWait(driver,10).until(lambda p: p.find_element(By.XPATH,"//*[text()='新闻']").is_displayed)
5.ActionChains——操作链
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
ActionChains(driver).click(driver.find_element(By.XPATH,"//*[text()='新闻']")).perform()
- 使用操作链需要先导入ActionChains对象
- ActionChains传入webdriver实例
- 接着预约了单击操作,看清楚这里并没有执行单击操作,这是对操作进行设置
- perform:执行操作链中所有的操作,即之前预约的所有操作
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome()
driver.get("https://www.baidu.com") # move_to_element会将鼠标指针放置在"设置"链接上,实现悬停效果
ActionChains(driver)\
.move_to_element(
driver.find_element(By.XPATH, "//span[text()='设置']"))\
.pause(3)\
.perform() ActionChains(driver)\
.click(driver.find_element(By.LINK_TEXT, "搜索设置"))\
.pause(3)\
.perform() ActionChains(driver)\
.click(driver.find_element(By.ID, "s1_2"))\
.click(driver.find_element(By.ID, "SL_2"))\
.click(driver.find_element(By.ID, "sh_1"))\
.click(driver.find_element(By.LINK_TEXT, "保存设置"))\
.pause(3)\
.perform()
注:
操作链中涉及的所有WebElement元素在操作链执行时必须同时存在,且处于可操作状态,否则无法执行操作链。也就是说,在同一个操作链中,无法做到先操作某个元素,然后另一个新元素才显示,接着再操作这个新元素。
6.对页面窗口截图
driver.save_screenshot(截图文件保存路径)
7.对元素截图
driver.find_element(By.XPATH,"//*[text()='新闻']").screenshot(截图保存的路径)
selenium webDriver的运用的更多相关文章
- Selenium WebDriver Code
Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...
- 使用httpclient 调用selenium webdriver
结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- Selenium Webdriver java 积累一
Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- Selenium Webdriver下click失效问题解决
最近在使用Selenium Webdriver(Selenium2.0)进行界面自动化测试的时候发现单击事件无效,通过driver.findElement的方式是可以找到click元素的,但是就是cl ...
- 如何用selenium webdriver 捕获js error
### 问题 捕捉页面上js error ### 解决办法 从Selenium webdriver log 中解析 # -*- coding:utf8 -*- import unittest from ...
- Selenium WebDriver 之 PageObjects 模式 by Example
目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...
- Selenium webdriver 操作日历控件
一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如: 但是,有的日期控件是readonly的 比如1 ...
- Selenium WebDriver 处理cookie
在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: ...
随机推荐
- 好客租房8-React基础阶段总结
React总结 1react是构建用户组件的javascript库 2使用react是,推荐使用脚手架方式 3初始化项目命令:npx create-react-app my-app 4启动项目命令:y ...
- unity---GL实现案例
GL C#实现 不管是画任何东西都需要Begin()和End()函数: 画线 using System.Collections; using System.Collections.Generic; u ...
- Fail2ban 简介
Fail2ban是一个基于日志的IP自动屏蔽工具.可以通过它来防止暴力破解攻击. Fail2ban通过扫描日志文件(例如/var/log/apache/error_log),并禁止恶意IP(太多的密码 ...
- 在 Git 提交信息中使用 Emoji
Gitmoji 旨在解释如何在 Git 提交消息时使用表情符号.在提交信息时使用表情符号,可以更容易地识别提交的目的或意图. Emoji 列表 :优化项目结构 / 代码格式 :art: ️ :性能提升 ...
- 用t-SNE进行流形学习(digits数据集)
流行学习算法: 是一类用于可视化的算法,它允许进行更复杂的映射,通常也可以给出更好的可视化. t-SNE算法是其中一种. PCA是用于变换数据的首选方法,也可以进行可视化,但它的性质(先旋转然后减少方 ...
- Spring Boot整合Swagger报错:"this.condition" is null
前段时间看到群里有吐槽swagger整合问题,当时没仔细看,总以为是姿势不对. 这两天正好自己升级Spring Boot版本,然后突然出现了这样的一个错误: Caused by: java.lang. ...
- Jmeter之测试片段--include控制器进行接口测试以及管理测试用例
1.线程组--右键添加--测试片段--测试片段 2.在测试片段中进行添加测试用例如下图: 3.通过include控制器进行调用测试片段 (通常使用全局) 选择线程组--右键添加--逻辑控制器--Inc ...
- vivo大规模 Kubernetes 集群自动化运维实践
作者:vivo 互联网服务器团队-Zhang Rong 一.背景 随着vivo业务迁移到K8s的增长,我们需要将K8s部署到多个数据中心.如何高效.可靠的在数据中心管理多个大规模的K8s集群是我们面临 ...
- Mac安装Brew包管理系统
Mac安装Brew包管理系统 前言 为什么需要安装brew 作为一个开发人员, 习惯了使用centos的yum和ubuntu的apt, 在mac中有没有这两个工具的平替? 有, 就是Brew. Bre ...
- linux系统健康检查脚本
#!/bin/bash echo "You are logged in as `whoami`"; if [ `whoami` != root ]; then echo " ...