selenium学习笔记

Selenium-webdriver(Python)学习笔记

一.相关原理和知识

Selenium是一个关于Web的自动化测试工具,它具有免费,轻巧,支持多语言,多平台,支持分布式测试用例的执行等一系列的优点。

Selenium家族大致上有四名成员,即Selenium RC,SeleniumIDE,Selenium Grid,Selenium Webdriver。笔者主要学习的Selenium Webdriver。Selenium Remote Control是一个代理服务器,它可以把各种编程语言编写的Selenium测试程序发送到指定的浏览器上并运行,它的内容使用jetty做为webserver,通过RC的代理可以解决js调用时的同源策略限制。使用Java/C#/Ruby等语言进行Selenium编程时,Selenium的API实际上是通过RC代理服务向浏览器发送命令的。Selenium IDE只用于FF,具有很好的记录功能,同时能将一系列操作直接转成相关的各式的代码,使用方便,却只能用于FF,但是功能强大,转成代码方便学习,笔者受用很大。Selenium Webdriver是Selenium1.X加入了Webdriver后的新产品,也称为Selenium2.X,功能强大又轻巧,对于各个语言,相当于只要引入相关的包即可使用。

remote-control的原理:

1.webdriver启动目标浏览器后,将绑定到指定的端口,以这个启动的浏览器实例做为web driver的remote server

2.Client端通过CommandExcuter发送HTTPRequest给remote server的侦听商口协议。

3.Remote Server需要依赖原生的浏览器组件,来转化浏览器的native调用

二.Selenium-webdriver的安装与启动

1.安装Python和Setuptools

2.安装Pip

3.安装selenium:

启动DOS,命令如下:pip install selenium

检测:进入python解释器,输入from selenium import webdriver

4.下载ChromeDriver,将下载后的文件解压至Chrome的安装目录下,并将ChromeDriver的目录添加至Path中。

5.启动Chrome浏览器:

在脚本中编辑:

from selenium import webdriver

from time import sleep //引入时间,为展示效果,浏览器休眠3秒再关闭

dr = webdriver.Firefox()

sleep(3)

dr.close()

6.关闭浏览器:quit()和close()两种方法,quit表示关闭页面的选项,close表示全然关闭浏览器。

三.Selenium+WebDriver的简单操作

1.访问URL,有两种方式,一种是直接GET,一种是用navigate()方式。

如访问谷歌:driver=webdriver.Chrome()

Driver.get(“http://www.google.com.hk”)

2.获得当前网址的title:driver.title

3.定位元素:

要想操作一个对象,就需要对对象中的元素进行了解甚至是抓取,对象中的元素也即是属性,Webdriver中提供了很多的对象定位的方法,如下:

* id  HTML标签的id属性

* name HTML标签的name属性

* class_name HTML标签的class属性

* css_selector 元素使用到的css选择器

* link_text 链接的显示文本

* partial_link_name 链接显示文本的一部分

* tag_name 标签名

* xpath

假设有一个网页的输入框代码如下所示:

<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd"
autocomplete="off">

具体的操作方式如下:

Id:   driver.find_element_by_id(‘kw’)
//选中id为kw的输入框

Name:  driver.find_element_by_name(‘wd’)

Class_name:  driver.find_element_by_class_name(‘s_ipt’)

Css_selector: driver.find_element_by_css_selector(‘#kw’)

Link_text: driver.find_element_by_link_text(‘吧’)

 

Xpath的定位:

XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现,
所以 selenium 用户可是使用这种强大语言在 web 应用中定位元素。XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。

最常用的表达式如下:

nodename    选取此节点的所有子节点。

/      从根节点选取。

//    从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。

.      选取当前节点。

..     选取当前节点的父节点。

@    选取属性。

例子使用:

bookstore     选取 bookstore 元素的所有子节点。

/bookstore

选取根元素 bookstore。

注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore/book   选取属于 bookstore 的子元素的所有 book 元素。

//book   选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book 选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。

//@lang 选取名为 lang 的所有属性。

4.添加休眠

有时为了更好的展示结果,需要添加休眠时间,这个操作只需要引入time包就可以添加相关的代码。

Import  time

Time.sleep(2)

通过添加implicitly_wait()就可以方便的实现智能等待了,它的作用是隐式的等待一个元素被发现或者一个命令完成,这个方法每次会话只需要调用一次。

5.设置浏览器大小

最大化:driver.maximize_window()

设置长宽:driver.set_window_size(480,500)

6.操作浏览器的前进,后退

前进与后退的方法 driver.back()和driver.forward()

7.鼠标的点击与键盘的输入

鼠标案例操作,在上述输入框中输入selenium并搜索

代码如下:

driver.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
#通过 submit() 来操作
driver.find_element_by_id("su").submit()

键盘按键的用法

当需要使用键盘输入时,需要引入一个包,方式如下

From
selenium.webdriver.common.keys import Keys

使用的具体方法如下:

..
driver.find_element_by_id(‘kw’).send_keys(Keys.ENTER)

鼠标事件的复杂用法

在自动化测试中,常需要进行右击,双击的操作,完成这两个动作,需要引入ActionChains类。引入方式如下:

..
from selenium.webdriver.common.action_chains import ActionChains

具体的操作如下:

..fei=driver.find_element_by_xpath(…)

Actionchains(driver).context_click(fei).perform()

Actionchains(driver).double_click(fei).perform()

8.定位frame页中的元素

当页面中包含其它html文件时,在处理内部的html时,需要使用switch_to_frame函数将webdriver对象指向frame页面,当处理完frame页面时,可以通过switch_to_default_content函数回到主页面上。

9.定位元素组

当我们要确认某一种元素数量或需要从某一些类似元素中找到特定的元素时,可以用到find_elements系列函数,比如列表中的一组CheckBox。操作如下

CheckBoxs=driver.find_elements_by_xpath(..)

..for Checkbox in CheckBox

Checkbox.click()

CheckBoxs[0].click()

10.在进行自动化测试的过程中,有时候目标的元素并不容易定位,我们可以先定位到其父级的元素,再寻找目标元素。

11.处理prompt/alert/confirm

处理JS原生的提示信息prompt/alert/confirm和处理frame类似,使用switch_to_alert方法切换对象,不同的是处理alert时是操作switch_to_alert的返回对象。

处理的简单案例如下:

fei_alert=driver.find_element_by_xpath(..)

fei_alert.click()

alert=driver.switch_to_alert()

12.处理弹窗

这里的弹窗不是alert一类由JS产生的对话框,而是指打开一个新链接时,产生的新的浏览器窗口,这里需要使用到switch_to_window。这个函数接受两种参数,一个就是窗口句柄,另一个就是新打开的窗口名称。

13.调用JS

执行JS一般有两种场景,一种是在页面直接执行JS,另一种是在某个已经定位的元素上执行JS。它使用execute_script(..)方法来执行。

案例:

js=”var q=document.getElementById(“”)

driver.execute_script(js)

14.控制浏览器滚动条

有时候我们需要控制页面滚动条上的滚动条,但滚动条并非是页面上的元素,这个时候就需要用JS来帮助操作。

案例:在百度中输入selenium之后,将页面滚动至底部,然后再滚动至顶部相关功能代码如下:

js="var
q=document.documentElement.scrollTop=10000"

driver.execute_script(js)

js="var
q=document.documentElement.scrollTop=0"

driver.execute_script(js)

四 自动化测试代码小试

# -*- coding: utf-8 -*-

from selenium import webdriver

from selenium.webdriver.common.by import
By

from selenium.webdriver.common.keys
import Keys

from selenium.webdriver.support.ui import
Select

from selenium.common.exceptions import
NoSuchElementException

from selenium.common.exceptions import
NoAlertPresentException

import unittest, time, re

import os

driver=webdriver.Firefox()

driver.get("http://wenwen.sogou.com/")

driver.maximize_window();

driver.find_element_by_name(‘ask‘).click()

time.sleep(2)

driver.find_element_by_id(‘s_login‘).click()

time.sleep(2)

driver.switch_to.frame(‘login_iframe‘)

driver.find_element_by_id(‘u‘).send_keys(‘123123‘)

driver.find_element_by_id(‘p‘).send_keys(‘123123‘)

time.sleep(5)

driver.find_element_by_id(‘login_button‘).click()

time.sleep(2)

driver.find_element_by_id("questionWrap").click()

time.sleep(2)

driver.find_element_by_id("questionWrap").clear()

time.sleep(2)

driver.find_element_by_id("questionWrap").send_keys(u"一枝红杏出墙来为什么这么神奇")

time.sleep(5)

driver.find_element_by_id("submitButton").click()

time.sleep(2)

driver.close();

时间: 11-09

selenium学习笔记的相关文章

【selenium学习笔记】webdriver进行页面元素定位

[selenium学习笔记]webdriver进行页面元素定位 进行Web页面自动化测试,对页面上的元素进行定位和操作是核心.而操作又是以定位为前提的,因此,对页面元素的定位是进行自动化测试的基础. 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver就是利用元素的这些属性来进行定位的. 可以用于定位的常用的元素属性: id name class name tag name link text partial link te

Selenium学习笔记之014:键盘的用法

主要学习知识点: 键盘按键用法 键盘组合键用法 send_keys() 输入中文运行报错问题 一.键盘按键键用法: #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.keys import Keys #需要引入keys包 import os,time driver = webdriver.Firefox() driver.get("http://passport.kuaibo.com/login

selenium学习笔记(下载安装)

博主自己捣鼓的接口框架先到这里 等工作上正式开始使用再后续完善需求 还是继续学习python.学编程就直接动手写 就想看看python+selenium的组合 什么都不多说.先下载安装 博主这里已经安装了pip 所以直接cmd进入python路径下的Scripts文件目录下

selenium 学习笔记 ---新手学习记录(1) 问题总结

说明:每次学习各种语言时,环境搭建访问国外网址最头疼了,现在只要是工具下载好放到自己网盘,可以随时用. 1.首先工具准备,selenium需要用到的 下载地址 访问密码 ff8f 2.我选择的语言时junit eclipse开发 junit包下载: 下载 访问密码 c23d eclipse自己百度 3.实例练习. 具体步骤百度 4.遇见的问题 等待解决的 1).如下图,如何让变量pwds每次自动加1呢?假设pwds初始值为1,我想每次自动加1,向下图所示在我运行完${pwds}+1后我打印出来结

Selenium 学习笔记---Selenium basic all in one

Selenium 是这些年非常流行的Web UI 自动化测试工具, 很多同学学习并使用过Selenium.但是一些问题仔细想来是不是让你觉得有些困惑,比如说Selenium 到底是什么东西,为什么能支持多语言编程,到底是怎么驱动浏览器工作的……不要着急,在这篇文章中我们会一一探讨这些问题 名词解释 Selenium 是什么,包含哪些组成部分 (蓝色字体为selenium 学习过程中经常会碰到的名词): 一般来说如果没有明确指明 Selenium 2.0 或 Web Driver而单说Seleni

selenium学习笔记(1) 搭建环境

1. 用Eclipse创建maven工程,在pom.xml中添加依赖 1 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> 2 <dependency> 3 <groupId>org.seleniumhq.selenium</groupId> 4 <artifactId>selenium-java</artifactId>

selenium学习笔记(2) 测试https网站

问题: selenium启动firefox的时候,会使用一个全新的profile作为启动的profile,即手工在firefox中的设置都无法使用. 解决: 找到手动启动firefox时的profile目录,测试程序中通过FirefoxProfile传递给WebDriver 1. 查看profile目录 命令行方式,进入firefox安装目录(多为: C:\Program Files (x86)\Mozilla Firefox),执行 firefox.ext -P 或 firefox.exe -

【selenium学习笔记一】python + selenium定位页面元素的办法。

1.什么是Selenium,为什么web测试,大家都用它? Selenium设计初衷就是为web项目的验收测试再开发.内核使用的是javaScript语言编写,几乎支持所以能运行javaScript的浏览器,支持windows\linux\macos等各种平台. Selenium 脚本是用多种受支持的编程语言中的一种编写的 —— 目前可用的有 Java.Ruby 和 Python 驱动程序.这些脚本在浏览器之外的一个单独的进程中运行.驱动程序的任务是执行测试脚本,并通过与运行在浏览器中的 bro

Selenium学习笔记之015:鼠标事件

ActionChains 类: context_click()  右击 double_click()   双击 drag_and_drop()  拖动 鼠标的双击.右击.拖动等应该怎样写呢?例如右击: driver.find_element_by_id("xxx").context_click() 经过运行脚本得到了下面的错误提示: AttributeError: 'WebElement' object has no attribute 'context_click' 提示右点方法不属