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数据的常用方法: ...
随机推荐
- TinyMCE简介
TinyMCE是一款开源.易用.UI时新的富文本编辑器. 插件丰富,自带插件基本满足要求 可扩展性强,可自定义功能 界面好看,符合现代审美 提供经典.内联.沉浸无干扰三种模式 官网:https://w ...
- 【单片机】CH32V103C8T6定时器3程序实验
代码功能:每隔1毫秒进入一次定时器中断. 每隔1秒串口打印一次数据. time.c #include "time.h" #include "ch32v10x.h" ...
- 云开发中的战斗机 Laf,让你像写博客一样写代码
各位云原生搬砖师 and PPT 架构师,你们有没有想过像写文章一样方便地写代码呢? 怎样才能像写文章一样写代码? 理想的需求应该是可以在线编写.调试函数,不用重启服务,随时随地在 Web 上查看函数 ...
- Java包机制和JavaDoc
目录 包机制 JavaDoc 视频课程 包机制 包的本质就是文件夹 为了更好的组织类, Java提供了包机制, 用于区别类名的命名空间, 使项目看起来更加整洁 一般公司庸域名倒置作为包名 为了能够使用 ...
- 2021.06.19【NOIP提高B组】模拟 总结
T1 题意:有 \(n\) 个点,有 \(m\) 条边,每次加入一条到图中 问每个点的度数大于零且都是偶数的子图的个数 考试直接判断两点是否出现,出现则更新 其实只要改成并查集判断即可 原理:其实就是 ...
- c++ 平衡树
平衡树的性质 它其实就是一个 BST(Binary Search Tree 二叉搜索树). 当然,不同的平衡树会有自己的特性 BST 的性质 只有一个:任意一个节点的左子树的所有节点都比它的优先级高, ...
- Amazon 消息订阅对接
亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...
- Python中的逻辑表达式
首先要明确一点,Python的逻辑运算符,可以用来操作任何类型的表达式(不局限于Bool类型),且运算后的结果也不一定是Bool类型的,而是其左右其中一个表达式的值 表达式1 and 表达式2 pyt ...
- 用WindowsAppSDK(WASDK)优雅的开发上位机应用
C#开发上位机应用的一些选择 如果你不想看介绍,可以直接跳到优雅开发示例那里. 1. WASDK(WinUI 3) Windows 应用 SDK 是一组新的开发人员组件和工具,它们代表着 Window ...
- Metasploit(msf)利用ms17_010(永恒之蓝)出现Encoding::UndefinedConversionError问题
Metasploit利用ms17_010(永恒之蓝) 利用流程 先确保目标靶机和kali处于同一网段,可以互相Ping通 目标靶机防火墙关闭,开启了445端口 输入search ms17_010 搜索 ...