Selenium

selenium概述

定义:开源的web自动化测试工具

用途:对web系统进行功能性测试,版本迭代时避免重复劳动

           兼容性测试(测试web程序在不同操作系统及浏览器中是否运行正常)

对web系统进行大数量测试

特点:可根据指令操控浏览器

只是工具,必须与第三方浏览器结合使用

安装:

linux:sudo pip3 install selenium

windows:python -m pip install selenium

环境安装:

chromedriver:http://chromedriver.storage.googleapis.com/index.html

chromedriver版本要和浏览器大版本对应,否则会闪退

把解压后的文件拷贝到python安装目录的Scripts目录下

查看python安装目录(cmd命令行):where python

验证:

from selenium import webdriver

browser=webdriver.Chrome()

如果浏览器能够正常打开,则说明环境安装没有问题

示例代码 - 打开Chrome浏览器,并打开百度首页

# 导入selenium的webdriver接口
from selenium import webdriver
# 1、创建浏览器对象 - 此时浏览器打开
browser=webdriver.Chrome()
# 2、输入百度地址并确定
browser.get('http://www.baidu.com/')
# 3、关闭浏览器
browser.quit()

示例代码 - 打开百度,输入python搜索,查看结果页

from selenium import webdriver
# 1、创建浏览器对象 - 打开浏览器
browser=webdriver.Chrome()
# 2、打开百度首页
browser.get('http://www.baidu.com/')
# 3、找到搜索框,并发送文字:python
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
# 4、找到百度一下按钮,并点击
browser.find_element_by_xpath('//*[@id="su"]').click()

浏览器对象browser常用方法及属性

browser.get() : 地址栏输入url地址并确认

browser.quit() : 关闭浏览器

browser.close() : 关闭当前页

browser.maximize_window() : 浏览器窗口最大化

browser.page_source : HTML结构源码

browser.page_source.find('字符串') 

从源码中查找指定字符串,没有返回-1,常用于判断最后一页

定位节点

单元素查找  -  返回值为节点对象

browser.find_element_by_id('id属性值')

browser.find_element_by_name('name属性值')

browser.find_element_by_class_name('class属性值')

browser.find_element_by_xpath('xpath表达式')

browser.find_element_by_link_text('链接文本')

browser.find_element_by_partical_link_text('部分链接文本')

browser.find_element_by_tag_name('标记名称')

browser.find_element_by_css_selector('css表达式')

多元素查找  -  返回值为节点对象的列表

browser.find_elements_by_id('id属性值')

browser.find_elements_by_name('name属性值')

browser.find_elements_by_class_name('class属性值')

browser.find_elements_by_xpath('xpath表达式')

browser.find_elements_by_link_text('链接文本')

browser.find_elements_by_partical_link_text('部分链接文本')

browser.find_elements_by_tag_name('标记名称')

browser.find_elements_by_css_selector('css表达式')

节点对象常用属性及方法

node.send_keys() : 向文本框发送内容

node.click() : 点击

node.clear() : 清空文本

node.get_attribute("属性名") : 获取节点属性值

node.text : 获取节点文本内容(包含子节点和后代节点)

设置无界面模式

from selenium import webdriver
# 1、创建Chrome功能对象
options=webdriver.ChromeOptions()
# 2、添加无界面功能
options.add_argument('--headless')
# 3、利用options参数实现无界面
browser=webdriver.Chrome(options=options)

selenium鼠标操作

selenium可以模仿人的几乎任何鼠标行为操作

导入鼠标事件类:from selenium.webdriver import ActionChains

实例化鼠标对象:ActionChains(browser)

指定鼠标行为:move_to_element(node)

执行鼠标行为:perform()

使用示例

ActionChains(browser).move_to_element(node).perform()

打开百度,移动到设置节点,点击高级搜索

from selenium import webdriver
# 到日鼠标事件类
from selenium.webdriver import ActionChains
driver=webdriver.Chrome()
# 打开百度首页
driver.get("http://www.baidu.com/")
# 查找设置节点并移动到此节点,perform()是真正执行操作
element=driver.find_element(By.XPATH,"//*[@id='u1']/a[8]")
ActionChains(driver).move_to_element(element).perform()
# 点击弹出的Ajax元素,根据链接节点的文本内容查找
driver.find_element_by_link_text("高级搜索").click()

selenium切换句柄

使用网站类型:页面中点击链接出现新的窗口,但是浏览器对象browser还是之前页面的对象,需要切换到不同的窗口进行操作

应对方案:browser.switch_to.window()

先获取当前所有句柄(列表)

再切换到指定句柄(利用列表下表索引取值)

代码实现:

all_handles=browser.window_handles
browser.switch_to.window(all_handles[1])

selenium frame

特点:网页中嵌套了网页,先切换到frame,然后再执行其他操作

处理步骤:

切换到要处理的的frame

在frame中定位页面元素并进行操作

返回当前处理的frame的上一级页面或主页面

常用方法:

切换到frame:browser.switch_to.frame(frame节点对象)

返回上一级:browser.switch_to.parent_frame()

返回主页面:browser.switch_to.default_content()

使用说明:

1、默认支持id和那么属性值查找:switch_to.frame(id|name)

2、先找到frame节点:frame_node=browser.find_element_by_id|name

        再切换到frame:browser.switch_to.frame(frame_node)

selenium登录豆瓣代码实现

from selenium import webdriver

browser=webdriver.Chrome()
# 打开豆瓣页面
browser.get("https://www.douban.com/")
# 切换到iframe子页面
login_frame=browser.find_element_by_xpath("//*[@id='anony-reg-new']/div/div[1]/iframe")
browser.switch_to.frame(login_frame)
# 密码登录+用户名+密码+登录豆瓣
browser.find_element(By.XPATH,'/html/body/div[1]/div[1]/ul[1]/li[2]').click()
browser.find_element(By.XPATH,'//*[@id="username"]').send_keys("用户名")
browser.find_element(By.XPATH,'//*[@id="username"]').send_keys("密码")
browser.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[1]/div[5]/a').click()

selenium执行JS脚本

浏览器对象执行JS脚本方法

browser.execute_script()

最常用脚本

把滚动条拉到底部

from selenium import webdriver

browser=webdriver.Chrome()
browser.execute_script(
    'window.scrollTo(0,document.body.scrollHeight)'
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值