声明实例运行浏览器

配置浏览器驱动后,可以通过简单的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. unity---脚本创建文本

    脚本创建文本 新建文件夹 Resources 方便引用字体 在文件Resources中新建Fonts,并且下载一个ttf字体 没有字体,文本内容无法显示 脚本如下 public GameObject ...

  2. 【单片机】CH32V103串口IDLE空闲中断

    CH32V103c8t6 在寻找解决接收完数据后,怎么即时判断数据已经完成了接收.发现串口有一个IDLE空闲中断.如下图描述: 意思是在串口接收完一帧数据 会产生一个中断,此时程序可判断为数据已接收完 ...

  3. 【转】理解 CI 和 CD 之间的区别

    有很多关于持续集成(CI)和持续交付(CD)的资料.很多文章用技术术语来进行解释,以及它们怎么帮助你的组织.可惜的是,在一些情况下,这些方法通常与特定工具.甚至供应商相关联.在公司食堂里非常常见的谈话 ...

  4. CabloyJS一站式助力微信、企业微信、钉钉开发 - 钉钉篇

    前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...

  5. 【C++ 字符串题目】 输入三个人名,按字母顺序排序输出

    题目来源:https://acm.ujn.edu.cn Problem A: [C++ 字符串] 输入三个人名,按字母顺序排序输出 Time Limit: 1 Sec  Memory Limit: 1 ...

  6. 【抬杠C#】如何实现接口的base调用

    背景 在三年前发布的C#8.0中有一项重要的改进叫做接口默认实现,从此以后,接口中定义的方法可以包含方法体了,即默认实现.不过对于接口的默认实现,其实现类或者子接口在重写这个方法的时候不能对其进行ba ...

  7. C#中的CSV文件读写

    目录 CSV文件标准 文件示例 RFC 4180 简化标准 读写CSV文件 使用CsvHelper 使用自定义方法 基于简化标准的写CSV文件 使用TextFieldParser解析CSV文件 使用正 ...

  8. ExtJS 布局-HBox 布局(HBox layout)

    更新记录: 2022年6月11日 更新文章结构. 2022年6月8日 发布. 2022年6月1日 开始. 1.说明 hbox布局与column布局几乎相同,但hbox允许拉伸列的高度. 既可以在水平方 ...

  9. 设置C#启动进程但不显示命令行窗口

    设置一下Process类型相关的配置属性即可,直接上代码. //记得引入命名空间 //using System.Diagnostics; //获得当前环境的基路径 string basePath = ...

  10. 2.C++标准库函数:getline函数 定界流输入截取函数 -windows编程

    引言:今天工作遇到了一个需要按行读取txt文件数据的需求,查询了一下getline()函数,发现这竟然是一个C++的标准库函数,而且设计的很好,特地做一下记录.getline本质是一个定界流输入截取函 ...