Selenium基本知识

Selenium是自动化浏览器的工具包, 从应用的源头(浏览器)驱动应用,使用广泛(主流浏览器厂商的支持),可控制成本,提高效率

 

Selenium工具包有什么?

1.RC--Selenium 1, 没用过。 

2.webdriver --Test Script using webdriver client libraries supported in java, ruby, python and etc.

大概流程: 脚本 - > Driver(chrome driver, friefox driver,ie Driver)- >浏览器- >web server hosting

-提供自动化的各种语言调用接口库

-通过各种浏览器驱动来驱动浏览器

3.selenium ide,没必要用啊。 

4.selenium grid -可以用来在多台机器上同时执行selenium自动测试,用于用例非常多, 测试耗时长

 

html元素的属性

-- 属性在hmtl元素开始标签中规定

--一个元素可以有很多属性

--属性以键值对形式出现

 

执行webdriver.Chrome() 时在任务管理器中除了有Chrome的进程, 还有chromedriver的。

driver.get() 要在webdriver.chrome加载完后再执行

 

Selenium自动化主要是:(感觉世界上所有的UI自动化都是这样)

1.选择界面元素

2.操作界面元素

--输入操作:点击,输入文字, 拖曳

--输出操作:获取元素的各种属性

3. 根据界面上获取的数据进行分析和处理(编程语言处理)

 

选择元素:

1, Webdriver对象: 操作整个浏览器和当前整个页面, 可以执行下面的操作

-获取页面上的选择符合查找条件的对象

-打开网址,回退,前进,刷新网页

-获取,改变浏览器窗口大小,关闭浏览器,截屏

-获取,设置cookies

2, webElement对象: 操作对应web元素

-当前web元素的所有子元素里面符合查找条件的对象

-操作该web元素,比如:

-点击元素

-输入字符

-获取元素坐标,尺寸,文本内容, 其它的属性信息

 

通过id选择元素: 效率最高,优先使用

两种写法:1. driver.find_element_by_id('kw')

2.from selenium.webdriver.common.by import By

driver.find_element(By.ID, value='kw')

没有找到元素,抛出下面异常:

selenium.common.exceptions.NoSuchElementException

 

获取元素信息:

-text属性 : 显示该元素在web页面上的文本

-get_attribute()方法

-获取某个元素的href属性值,如:

ele = driver.find_element()

ele.get_attribute(("href"))

-获取某个元素的html源代码

ele = driver.find_element()

ele.get_attribute("outerHTML")

-获取某个元素的内部部分的html源代码

ele = driver.find_element()

ele.get_attribute("innerHTML")

-所有方法无法获取到后,用上面那种方法, 将代码取下来后, 用Beautiful Soup 在本地做分析

通过用bs与selenium两种技术融合使用,达到我们的目的

隐式等待:

driver.implicity_wait(10) --这个driver所影响的所有的find_element的操作

显示等待:

为一个操作专门指定等待时间

from selenium.webdriver.support.ui import Webdriver

from selenium.webdriver.support import expected_conditoins as EC

方法1:

ele = WebDriverWait(driver).until(EC.presence_of_element_located(By.ID,'username'))

方法2:

WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("elementID"))

我喜欢用的小技巧:

1. 先设置隐式等待,为一些时间特别长的操作设置特定操作

2. 或者将driver.implicity_wait(10)先改为60S, 做完后再改回10S, 就可以不要这个显示等待

 

PO模式 Page Object 减少重复代码, 分层, 好维护

每个页面一个类, 元素和方法放在一个类里

 

我喜欢的一些小方法,如果要定位的元素没有ID, 就继续往上继续找ID,然后在ID下查找

 

定位不到元素时,考虑下是否在不同的frame里。

导航栏放在iframe外, 点击按钮

frameset

iframe

frame

 

切换以iframe里面

driver.switch_to_frame(frame_reference)

frame_reference 可以是

1. name或者ID

2. 索引index

3. frame所对应的WebElement: find_element返回的

 

元素找不到:

1.加载太慢

2.在其他的frame里

 

Cookies处理

cookie = driver.get_cookies()

 

driver.find_element_by_css_selector(“input.logging”).submit()#用于对信息进行提交,也可以使用click()进行代替,submit()要求提交对象是一个表单,click()更强调事件的独立性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值