Python Selenium基础知识--环境介绍

一、Selenium+Python环境搭建及配置

1.1 selenium 介绍

selenium 是一个 web 的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,因为它相比 QTP 有诸多有点:

免费,也不用再为破解 QTP 而大伤脑筋小巧,对于不同的语言它只是一个包而已,而 QTP 需要下载安装1个多 G 的程序。这也是最重要的一点,不管你以前更熟悉 C、 java、ruby、python、或都是 C# ,你都可以通过 selenium 完成自动化测试,而 QTP 只支持 VBS支持多平台:windows、linux、MAC ,支持多浏览器:ie、ff、safari、opera、chrome支持分布式测试用例的执行,可以把测试用例分布到不同的测试机器的执行,相当于分发机的功能。1.2 selenium+Python环境配置

前提条件:已安装好Python开发环境(推荐安装Python3.5及以上版本)

安装步骤:

安装selenium

Win:pip install selenium

Mac:  pip3 install selenium

安装webdriver

注:webdriver需要和对应的浏览器版本以及selenium版本对应webdriver安装路径

Win:复制webdriver到Python安装目录下

Mac:复制webdriver到/usr/local/bin目录下

二、元素定位及浏览器基本操作

2.1 启动浏览器

2.1.1 普通方式启动

启动Chrome浏览器:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('URL')

启动Firefox浏览器:

from selenium import webdriver

browser = webdriver.Firefox()

browser.get('URL')

启动IE浏览器:

from selenium import webdriver

browser = webdriver.Ie()

browser.get('URL')

2.1.2 Headless方式启动

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

Headless Chrome 对Chrome版本要求:

官方文档中介绍,mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+,同时chromedriver要求2.30+版本。

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.common.keys import Keys

chrome_options = webdriver.ChromeOptions()   # 使用headless无界面浏览器模式chrome_options.add_argument('--headless')      #增加无界面选项

chrome_options.add_argument('--disable-gpu')  #如果不加这个选项,有时定位会出现问题

# 启动浏览器,获取网页源代码#

browser = webdriver.Chrome(chrome_options=chrome_options)

browser.get("URL")

print(f"browser text = {browser.page_source}")

browser.quit()

2.1.3 加载配置启动浏览器

Selenium操作浏览器是不加载任何配置的,下面是关于加载Chrome配置的方法:

用Chrome地址栏输入chrome://version/,查看自己的“个人资料路径”,然后在浏览器启动时,调用这个配置文件,代码如下:

#coding=utf-8

from selenium import webdriver

option = webdriver.ChromeOptions()

option.add_argument('--user-data-dir=C:\Users\Administrator\AppData\Local\Google\Chrome\User Data') #设置成用户自己的数据目录

driver=webdriver.Chrome(chrome_options=option)

而加载Firefox配置的方法有些不同:

打开Firefox点右上角设置>?(帮助)>故障排除信息>显示文件夹,打开后把路径复制下来就可以了

# coding=utf-8

from selenium import webdriver

# 配置文件地址

profile_directory = r'C:\Users\\xxx\AppData\Roaming\Mozilla\Firefox\Profiles\1x41j9of.default'

# 加载配置配置profile = webdriver.FirefoxProfile(profile_directory)

# 启动浏览器配置driver = webdriver.Firefox(profile)

2.1.4 浏览器基本操作

1、浏览器关闭、前进、后退、刷新

driver.close()#关闭当前焦点所在的页面
driver.quit()#完全退出并关闭浏览器
driver.forward()#前进,切换到下一页
driver.back()#后退,返回上一页,相当于浏览器左上角的左箭头按钮
driver.refresh()#刷新页面后当前页面的数据全部被清空,相当于浏览器输入框后面的刷新按钮

2、设置窗口大小
driver.maximiza_window() #最大化
driver.minimize_window() #最小化
driver.set_window_size(1920,1080) #
print(driver.get_window_size())#获取当前窗口的大小

3、获取浏览器属性的方法
print(driver.title) # 获取当前的值
print(driver.current_url) # 获取当前的浏览器地址
print(driver.page_source) # 获取页面的源码信息
print(driver.capabilities) # 获取字典类型

print(driver.window_handles) #获取当前当前窗口的句柄,所有的窗口、返回字符串
driver.switch_to.window(driver.window_handles[-1]) #切换窗口到最后一个页面
driver.switch_to.window(driver.window_handles[0]) #返回到原窗口

driver.name #获取浏览器名称

4、文本链接🔗
driver.find_element_by_partial_link_text('新闻').click()
drive.back()
driver.find_element_by_link_text('地图').click()

5、判断页面元素是否可见
is_displayed1 = (driver.find_element_by_partial_link_text('地图').is_displayed())
print("返回布尔值:", is_displayed1)
6、判断页面元素是否可操作
is_displayed1 = (driver.find_element_by_partial_link_text('地图').is_enabled())
print("返回布尔值:", is_displayed1)

  7、获取页面元素属性的内容
print(driver.find_element_by_partial_link_text('地图').get_attribute("name")

8、获取页面元素的标签内容print(driver.find_element_by_partial_link_text('地图').get_property("textContent"))
get_property('innerHTML')# 获取元素内的全部HTML
get_property('outerHTML')# 获取包含选中元素的HTML

  9、截屏

1.打开网站之后,也可以对屏幕截屏
2.截屏后设置制定的保存路径+文件名称+后缀

driver.get_screenshot_as_file('本地路径')

10、退出
1.退出有两种方式,一种是close;另外一种是quit
2.close用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口
3.quit用于结束进程,关闭所有的窗口
4.最后结束测试,要用quit。quit可以回收c盘的临时文件

driver.close() #闭当前窗口

driver.quit() #结束进程

基本操作进阶处理

模拟鼠标键盘的复杂操作行为

1)导入支持双击操作的模块
from selenium.webdriver.common.action_chains import ActionChains
2)创建实例
ac=ActionChains(driver)

1.1鼠标双击操作 (比如某一个按钮需要连续点击两次才可显示内容)
button = driver.find_element_by_class_name('double')
ac.double_click(button).perform()#双击后 点击执行

1.2鼠标移动到页面元素
button = driver.find_elements_by_class_name('over')
ac.move_to_element('button').perform()#移动 点击执行

1.3综合操作
button1 = driver.find_element_by_class_name('double')
button2 = driver.find_element_by_class_name('over')
ac.double_click(button1)#双击
ac.perform()#执行

ac.move_to_element(button2)#移动
ac.perform()#执行

1.4鼠标滑动、三种方式

方式一:点击且按住
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
# 按住滑动的按钮
ac.click_and_hold(slider)
# 向右移动到confirm元素
confirm = driver.find_element_by_id('slider_confirm')
ac.move_to_element(confirm)
# 鼠标放开
c.release()
# 执行
ac.perform() 方式二:拖拽并且放开
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
confirm = driver.find_element_by_id('slider_confirm')
ac.drag_and_drop(slider, confirm).perform()#开始目标、结束目标、执行

方式三:坐标拖拽x 和 y
slider = driver.find_element_by_xpath('//div[@id="slider"]/span[1]')
ac.drag_and_drop_by_offset(slider,1000,0).perform()
1.5模拟键盘按键、如Tab、Enter 导入键盘操作

from selenium.webdriver.common.keys import Keys
driver.find_element_by_id('user').click()
ac.send_keys('我来了')
ac.send_keys(Keys.TAB)
ac.send_keys('我在这儿')
ac.send_keys(Keys.ENTER)
ac.send_keys('在这儿') ac.perform() 1.6跳转到js弹窗 

driver.find_element_by_class_name('alert').click()
driver.switch_to.alert.accept() #确定  switch_to切换
driver.switch_to.alert.dismiss() #取消
driver.switch_to.alert.send_keys('我在这里') #输入可见的内容

1.7跳转 frame 嵌套的网页 进入的时候需要一层一层、出来时可直接跳转到最外层

driver.switch_to.frame('aa') # 嵌套的ID
driver.find_element_by_id('kw').send_keys('慧测')
driver.find_element_by_id('su').click()
driver.switch_to.frame(0) # 嵌套的index
driver.find_element_by_id('kw').send_keys('慧测')
driver.find_element_by_id('su').click()
# 参数用element
fr = driver.find_element_by_id('aa')
driver.switch_to.frame(fr)

driver.switch_to.default_content() #跳转最外层

1.8植入Cookie ---免登陆
driver.get('http://www.huicewang.com/ecshop')
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.add_cookie({'name': '', 'value': ''})
driver.refresh()

1.9隐式等待时间

driver.implicitly_wait(10) 

2.0植入js javascript
移除input的只读属性readonly
driver.get('file:///Users/chenhy/Documents/demo.html') #本地
driver.execute_script('document.getElementById("text").readOnly=false') true为只读
driver.find_element_by_id('text').send_keys('再向上')#修改信息
2.1滚屏
driver.execute_script('window.scrollTo(0,100)')

2.2 判断元素是否存在或者可以点击
is_enabled()   是否可以编辑,或者按钮是否可以点击
is_displayed() 判断元素是否显示 
is_selected()  判断元素是否选中状态

selenium元素定位

1、xpath的contains函数进行查找文本文字内容

//*[contains(text(),'后台审核')] ,意思就是说,查找整个HTML文档里,从根节点开始数,不管什么标签,只要中间有“后台审核”四个字,就给我定位到

//div[contains(text(),"包含的字符串")]

text() 函数文本定位
page_next = driver.find_element(By.XPATH, '//a[text()="下一页")]')

page_next = driver.find_element(By.XPATH, '//a[contains(text(), "下一页")]')

//input[starts-with(@name,'name1')]     查找name属性中开始位置包含'name1'关键字的页面元素

//input[contains(@name,'na')]         查找name属性中包含na关键字的页面元素

<a href="http://www.baidu.com">百度搜索</a>

xpath写法为 //a[text()='百度搜索'] 

或者 //a[contains(text(),"百度搜索")]

2.Python通过xpath查找元素通过selenium读取元素信息

e=driver.find_element_by_xpath('//*[@id="lg"]/img')
print e
print e.text
print e.id
print e.tag_name
print type(e)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值