声明实例运行浏览器

配置浏览器驱动后,可以通过简单的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表达式
/子节点
//任意位置
*任意元素
.当前节点 ..父级极点
子节点稳定//*[@属性=“属性值”]/.. 这样就可以向上找到节点在往上继续/.. 然后往下找div[索引]
following-sibling::同节点最近的下一个(小哥)
preceding-sibling::同节点最近的上一个(大哥)
@代表属性
格式
属性://*[@属性=“属性值”]
文本://*[text()='文本值']
模糊查询 [ contains(@属性/text(),“值”)]
starts_with(@属性/text(),“值”):以xxx开始 :属性,文本值
多条件查询and:
//*[@属性=‘值’ and@属性=‘值’ ]
svg元素
//*[name()='svg']

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(等待秒数)

缺点:

  1. 全局使用
  2. 如果某个元素未定位到会完整的等待设置的最长时间,减缓了执行速度
  3. 很多页面有较多的异步刷新和操作,很多元素是动态的,都需要等待,用隐式也不太好
元素级等待机制——显式等待

元素级等待机制的最佳实践方式是显式等待,它是一种相当完美的等待机制。只需要指定条件判断函数,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()
  1. 使用操作链需要先导入ActionChains对象
  2. ActionChains传入webdriver实例
  3. 接着预约了单击操作,看清楚这里并没有执行单击操作,这是对操作进行设置
  4. 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的运用的更多相关文章

  1. Selenium WebDriver Code

    Selenium WebDriver 用于模拟浏览器的功能,可以做网站测试用,也可以用来做crawler.我是用eclipse开发的,导入selenium-server-standalone-***. ...

  2. 使用httpclient 调用selenium webdriver

    结合上次研究的selenium webdriver potocol ,自己写http request调用remote driver代替selenium API selenium web driver ...

  3. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  4. Selenium Webdriver java 积累一

    Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...

  5. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  6. Selenium Webdriver下click失效问题解决

    最近在使用Selenium Webdriver(Selenium2.0)进行界面自动化测试的时候发现单击事件无效,通过driver.findElement的方式是可以找到click元素的,但是就是cl ...

  7. 如何用selenium webdriver 捕获js error

    ### 问题 捕捉页面上js error ### 解决办法 从Selenium webdriver log 中解析 # -*- coding:utf8 -*- import unittest from ...

  8. Selenium WebDriver 之 PageObjects 模式 by Example

    目录 1. 项目配置 2. 一个WebDriver简单例子 3. 使用Page Objects模式 4. 总结 5. Troubleshooting 6. 参考文档 本篇文章通过例子来阐述一下Sele ...

  9. Selenium webdriver 操作日历控件

    一般的日期控件都是input标签下弹出来的,如果使用webdriver 去设置日期, 1. 定位到该input 2. 使用sendKeys 方法 比如: 但是,有的日期控件是readonly的 比如1 ...

  10. Selenium WebDriver 处理cookie

    在使用webdriver测试中,很多地方都使用登陆,cookie能够实现不必再次输入用户名密码进行登陆. 首先了解一下Java Cookie类的一些方法. 在jsp中处理cookie数据的常用方法: ...

随机推荐

  1. 好客租房11-为什么脚手架使用jsx语法

    为什么脚手架中可以使用jsx语法 1jsx不是标准的ECMAScript ,他是ECMAScript的语法扩展 2需要使用babel编译处理后 才能在浏览器环境中使用 3create-react-ap ...

  2. 使用虚拟机在3台centos7系统安装docker和k8s集群

    一.安装docker 环境:准备3台centos7系统,都安装上docker环境,具体安装步骤和流程如下 参考: https://docs.docker.com/install/linux/docke ...

  3. nginx 源码安装配置详解(./configure)

    在"./configure"配置中,"--with"表示启用模块,也就是说这些模块在编译时不会自动构建,"--without"表示禁用模块, ...

  4. 第6组 Alpha冲刺 (5/6)

    目录 1.1 基本情况 1.2 冲刺概况汇报 1.郝雷明 2. 方梓涵 3.董翔云 4.杜筱 5.詹鑫冰 6.黄少丹 7.曹兰英 8.鲍凌函 9.曾丽莉 10.吴沅静 1.3 冲刺成果展示 1.1 基 ...

  5. 如何为Java面试准备项目经验

    1 提出问题 应届生朋友或Java程序员在找Java方面的工作时,一定会需要准备Java项目经验,但事实上不少求职者,是没有项目经验,或者只具有开源社区等的学习项目经验,这样的话,就很有可能在面试时无 ...

  6. Jmeter(五十三) - 从入门到精通高级篇 - 懒人教你在Linux系统中安装Jmeter(详解教程)

    1.简介 我们绝大多数使用的都是Windows操作系统,因此在Windows系统上安装JMeter已经成了家常便饭,而且安装也相对简单,但是服务器为了安全.灵活小巧,特别是前几年的勒索病毒,现在绝大多 ...

  7. Vue3.0系列——「vue3.0学习手册」第一期

    一.项目搭建 vite是尤大大开发的一款意图取代webpack的工具.其实现原理是利用ES6的import发送请求加载文件的特性.拦截这些请求,做一些编译,省去webpack冗长的打包时间.并将其与R ...

  8. VisionPro · C# · 加密狗检查程序

    写VisionPro C#项目时,我们需要在程序的启动时加载各种配置文件,以及检查软件授权,以下代码即检查康耐视加密狗在线状态,如查无加密狗,关闭程序启动进程并抛出异常. 1 using System ...

  9. 对象映射 - Mapping.Mapster

    前言 在项目中我们会经常遇到对象的映射,比如像Model和Dto之间的映射,或者是对象的深拷贝,这些都是需要我们自己实现的.此时,项目中会出现很多初始化对象的代码,这些代码写起来相当的枯燥乏味,那么有 ...

  10. SpringBoot项目启动org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException解决方法

    将Pom文件中的SpringBoot版本调低即可. 我的是调成了2.5.6