什么是selenium?
一个用于Web应用程序测试的工具直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。测试与浏览器的兼容性,测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能,创建衰退测试检验软件功能和用户需求。
slenium前世
早期是直接使用 javascrip 注入技术与浏览器打交道,slenium RC启动一个server 将web元素api转换为javascript。在Selenium内核启动浏览器之后注入这段Javascript,由此才实现了Selenium的目的:自动化Web操作。这种Javascript注入技术的缺点是速度不理想,而且稳定性大大依赖于Selenium内核对API翻译成的Javascript质量高低。
slenium现在
Selenium2.x 提出了WebDriver的概念之后与浏览器交互利用原生的API,直接操作浏览器页面里的元素。不同的浏览器厂商对Web元素的操作和呈现一些差异直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现。Selenium3.0发布后,最大更新点就是干掉了对selenium rc的支持,后面就一直是webdriver协议,
WebDriver工作流程
1、通过WebDriver创建一个浏览器服务,remote server
2、脚本启动时会在新的线程中启动一个浏览器,并绑定特定的端口,没个浏览器有不同的端口段。
3、client 创建1个session,在该session中通过http请求向remote server发送restful的请求,remote server解析请求,完成相应操作并返回response。
4、分析response,继续执行脚本还是结束执行
command.py
Command类中定义了WebDriver的一些常用的常量。
remote\webdrvier.py
所有浏览器webdrvier的基类,其中包含了所有webdriver的api接口
remote\remote_connection.py
包含启动Remote WebDrvier server,执行client请求,self._commands是selenium的核心请求参数,根据对应的Command常量,发送不同的http请求。
selenium的搭建
1.在python中安装好selenium包 : pip install selenium
2.在配置好浏览器的驱动程序根据http://www.imdsx.cn/index.php/2017/08/02/drvier/ 驱动对照表下载Chrome对驱动,并添加在PATH环境变量中,
编写以下代码能打开对应的浏览器就配置成功:
from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.imdsx.cn')
google浏览器
from selenium import webdriver driver = webdriver.Firefox() driver.get('http://www.imdsx.cn')
火狐浏览器
from selenium import webdriver driver = webdriver.Ie() driver.get('http://www.imdsx.cn')
IE浏览器
selenium定位
import selenium #引用selenium包 from selenium import webdriver#引用包的服务 driver = webdriver.Chrome()#创建浏览器 当做我们的服务端 driver.get('xxxxxxxxxxxxxxx/')#打开对应测试网站,这里的url 必须带有http # 8种单数定位方式 # id进行定位 # driver.find_element_by_id('i1').send_keys('123123')#send_keys向文本框输入数字 # class 定位方式 # driver.find_element_by_class_name('classname').send_keys('123123') # name定位方式 # driver.find_element_by_name('name').send_keys('123123') # 文案定位 # driver.find_element_by_link_text('新建标签页面').click() #.click()表示点击操作 # 文案包含定位方式 js = 'window.scrollTo(0,0);' # 将滚动条调制最上方 driver.execute_script(js)# 执行写好的js # import time # # time.sleep(2)#界面如果反应比较慢可以加载等等时间 # driver.find_element_by_partial_link_text('新建标签').click() # 标签名定位 最不常用的 # driver.find_element_by_tag_name('input').send_keys('1111') # xpath 定位 # driver.find_element_by_xpath('//*[@id="i1"]').send_keys('2222') # css id 定位 # driver.find_element_by_css_selector('#i1').send_keys('2222') # # css name 定位 # driver.find_element_by_css_selector('name').send_keys()
8种定位方式
xpath定位
xpath(xpath 定位尽量少用层级定位,如果开发更改了页面的层级,所有定位都挂了,尽量属性定位为主,层级为辅助) //* 取当前页面的全部元素 //*[@id='i1'] id 进行定位 @代表引用属性 //*[@placeholder="请通过ID定位元素"] //input[@placeholder="请通过ID定位元素"] 通过 标签名进一步缩小范围 //select[4] 如果存在不唯一的情况 可以通过角标进行取值 xpath从1开始取 //select[@size=" and @multiple="multiple"] 逻辑定位
xpath定位
当不确定时可以只用copy直接复制xpath地址(这个地址相当于层级定位最好少用)