您的位置:首页 > 编程语言 > Python开发

软件测试 python基础的selenium

2020-01-15 08:07 239 查看

原理

selenium是web应用的自动化框架,selenium提供很多程序语言的接口,包括java,python,js,ruby

1,安装selenium

1,本人选用谷歌浏览器(chrome),还可选择火狐,ie等,版本对应的浏览器驱动。得到chromedriver.exe文件
Chrome驱动下载地址
2,将浏览器驱动设置到环境变量
3,python 安装selenium包中,安装客户端库

#在dos命令行或linux终端
pip install selenium

4,在pycharm中调用selenium库进行使用

from selenium import webdriver
#创建webdriver对象,用于启动浏览器
wd=webdriver.Chrome(r'c:\chrome.driver.exe')#存储位置
#用get方法打开一个网址
wd.get('https://www.baidu.com')

2,webdriver API学习

2.1定位元素

注:css和xpath在用火狐浏览驱动时,可以有插件firepath和firebug,来自动生成css和xpath对应的语法
1,css定位

wd.find_element_by_css_selector('')
符号 例子 作用
# #name id选择器,选择id="name"的元素
“.” .name class选择,选择class="name"的元素
+ div+input 同一级别中紧挨着div的input
> div>input 表示父元素为div的input元素
空格 div input div的所有div后代元素
[attribute=value] [target=zyc] 属性定位,选择target为“zyc”的所有元素

example:

wd.find_element_by_css_selector(".sceme")
wd.find_element_by_css_selector("#name")
#组合定位
wd.find_element_by_css_selector("name.firstname>new>input.firs")
#要照标签为input对应属性值为firs,父元素为new,父父元素为name,其属性为firstname

|
2,xpath定位
xpath是一种在xml文件中定位元素的语言,又html是xml中的一种实现,故selenium。
1,绝对路径定位

wd.find_element_by_xpath("/html/body/d/input")

2,元素属性定位

#找到元素input且其id为‘kw’
wd.find_element_by_xpath("//input[@id='kw']")
wd.find_element_by_xpath("//input[@name='zyc']")
#如果不想指定标签名,用 * 号
wd.find_element_by_xpath("//*[@class="zho"]")

3,按次序选择

//p[2]          p类型的第二个元素
//div/p[2]      父类元素为div的第二个p类型元素
//div/*[2]		父类元素为div的第二个元素
倒数
//p[last()]   倒数第一个
//p[last()-n] 倒数第n+1个
范围选择,css未有
//option[position() <= 2]   前两个option类的子元素

4,组选择,父节点,兄弟节点

#xpath选择父节点,css做不到
//*[@id='china']/..         id为china元素的父元素
兄弟节点
//*[@class='single_choice']/following-sibling::*

3,id定位

wd.find_element_by_id('')

4,name定位

wd.find_element_by_name('')

5,class定位

wd.find_element_by_class_name('')

6,tag标签定位

wd.find_element_by_tag_name('')

7,link定位
通过元素标签对之间的文本信息来定位元素

wd.find_element_by_link_text('新闻')
wd.find_element_by_link_text('地图')

8,partial link定位
是link定位的一部分,取文本链接的一部分

wd.find_element_by_partial_link_text('他是一个')

9,用by定位元素
针对webdriver另外一套方法,调用find_element()

from selenium.webdriver.common.by import By

wd.find_element(By.ID,'kw')
wd.find_element(By.NAME,'kw')
wd.find_element(By.CLASS,'kw')
wd.find_element(By.LINK_TEXT,'kw')
wd.find_element(By.PARTIAL_LINK_TEXT,'kw')
wd.find_element(By.XPATH,'//*[class='class']')
wd.find_element(By.CSS_SELECTOR,'span>input')

3,控制浏览器

driver=wd.Chrome()
driver.set_window_size(480,600)
driver.maximize_window() #最大化

driver.back()		          #后退
driver.forward()              #前进
driver,refresh() 			  #刷新页面

注意

frame 切换/窗口切换

frame切换
iframe元素非常特殊,在html语法中,frame元素或者iframe元素内部往往镶嵌有其他html文档,档我们打开一个网页的时候,内容是包含当前的frame中并不包含被嵌入的html文档里面的内容。
故,切换之。WebDriver的switch_to属性

wd.switch_to.frame('frame_reference')

其中frame_reference是其frame里面的属性name或id
若是根据frame的元素位置或是属性特性,使用find系列方法,如下:`

wd.switch_to.frame(wd.find_element_by_tag_name('iframe'))

回到以前的frame中

wd.switch_to.default_content()     默认frame框

窗口切换

from selenium import webdriver
wd=webdriver.Chrome(r'c:\chrome.exe')
wd.implicitly_wait(10)
wd.get('http://www.baidu.com')
#保留之前窗口
formerWindow=wd.current_window_handle
for handle in wd.window_handles:
#先切换到对应窗口
wd.switch_to.window(handle)
#检测对应窗口是否目的窗口,此处为baidu,达到退出
if 'baidu' in wd.title:
break
#若是后面要切换回原来的同样的方法1
#法2:将以前的窗口在切换之前保留
#formerWindow=wd.current_window_handle
wd.switch_to.window(formerWindow)

wd.implicitly_wait(10)
此语句作用,当检测到find元素语句时,如果没找到语句就不报错,而是每隔半秒上去查看元素,生成webdriver,就立即开始查找。上限设置为10秒。

选择框 radio checkbox select

选择框

实战技巧

实战技巧

  • 点赞
  • 收藏
  • 分享
  • 文章举报
於川川呀 发布了13 篇原创文章 · 获赞 0 · 访问量 376 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: