博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
轻松自动化---selenium-webdriver(python) (四)--如何定位一组元素?
阅读量:4289 次
发布时间:2019-05-27

本文共 3079 字,大约阅读时间需要 10 分钟。

场景

从上一节的例子中可以看出,webdriver可以很方便的使用findElement方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,

这时候就需要使用findElements方法。

 

定位一组对象一般用于以下场景:

· 批量操作对象,比如将页面上所有的checkbox都勾上

· 先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象。比如定位出页面上所有的checkbox,然后选择最后一个

            
Checkbox

checkbox

将这段代码保存复制到记事本中,将保存成
checkbox.html
文件。(注意,这个页面需要和我们的自动化脚本放在同一个目录下

 

第一种方法:

通过浏览器打个这个页面我们看到三个复选框和两个单选框。下面我们就来定位这三个复选框。

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = webdriver.Firefox()file_path =  'file:///' + os.path.abspath('checkbox.html')dr.get(file_path)# 选择页面上所有的input,然后从中过滤出所有的checkbox并勾选之inputs = dr.find_elements_by_tag_name('input')for input in inputs:    if input.get_attribute('type') == 'checkbox':        input.click()time.sleep(2)dr.quit()
你可以试着把input.get_attribute('type') == 'checkbox' 中的
checkbox 
变成
radio 
,那这个脚本定位的会是两个单选框。

第二种定位方法:

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = webdriver.Firefox()file_path =  'file:///' + os.path.abspath('checkbox.html')dr.get(file_path)# 选择所有的checkbox并全部勾上checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')for checkbox in checkboxes:    checkbox.click()time.sleep(2)# 打印当前页面上有多少个checkboxprint len(dr.find_elements_by_css_selector('input[type=checkbox]'))time.sleep(2)dr.quit()

第二种写法与第一种写法差别不大,都是通过一个循环来勾选控件;如果你学过上一章的话,细心的你一定发现用的定位函数不一样,

第一种用的name ,第二种用的CSS 。

 

 如何去掉勾选:

还有一个问题,有时候我们并不想勾选页面的所有的复选框(checkbox),可以通过下面办法把最后一个被勾选的框去掉。如下:

# -*- coding: utf-8 -*-from selenium import webdriverimport timeimport osdr = webdriver.Firefox()file_path =  'file:///' + os.path.abspath('checkbox.html')dr.get(file_path)# 选择所有的checkbox并全部勾上checkboxes = dr.find_elements_by_css_selector('input[type=checkbox]')for checkbox in checkboxes:    checkbox.click()time.sleep(2)# 把页面上最后1个checkbox的勾给去掉dr.find_elements_by_css_selector('input[type=checkbox]').pop().click()time.sleep(2)dr.quit()

其实,去掉勾选表也逻辑也非常简单,就是再次点击勾选的按钮。可能我们比较迷惑的是如何找到“最后一个”按钮。pop() 可以实现这个功能。

好吧!在web自动化的学习过程中,我们必须要知道一些前端的东西,这里扩展一下:

http://www.w3school.com.cn/js/jsref_pop.asp

 

 

尝试

把find_elements_by_css_selector('input[type=checkbox]').pop().click() 中的checkbox 变成radio 会是什么效果,自己尝试一下吧!

转载至:虫师  http://www.cnblogs.com/fnng/p/3190966.html
你可能感兴趣的文章
干货:Java几种线程池的分析和使用。
查看>>
避免在Java接口中使用数组的3个理由
查看>>
android 自定义带动画的统计饼图
查看>>
入职必备,Android 真实面试题(内有答案)
查看>>
JavaScript 日期处理类库---Moment.js
查看>>
仿斗鱼直播的弹幕效果实现
查看>>
Android(Java)中的Object
查看>>
Java反射机制——学习总结
查看>>
Android大图片处理
查看>>
如何将util.Date转化为sql.Date
查看>>
Java笔试题及答案
查看>>
这是一个挺有意思的Java讨论话题
查看>>
没错!java中private字段也是可以访问D!
查看>>
安卓:文本框TextView/EditText的开源库清单
查看>>
Android中Xposed框架篇---利用Xposed框架实现拦截系统方法
查看>>
腾讯老司机的RecyclerView局部刷新爬坑之路
查看>>
JavaScript null 和 undefined
查看>>
JavaScript 里的splice()与slice()
查看>>
Javascript替代eval方法
查看>>
Android开发UI布局必备基础知识
查看>>