当前位置: 首页 > news >正文

Selenium2+python自动化11-定位一组元素find_elements

前言    

前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象。

webdriver 提供了定位一组元素的方法,跟前面八种定位方式其实一样,只是前面是单数,这里是复数形式:find_elements

本篇拿百度搜索作为案例,从搜索结果中随机选择一条搜索结果,然后点击查看。

一、定位搜索结果

    1.在百度搜索框输入关键字“测试部落”后,用firebug查看页面元素,可以看到这些搜索结果有共同的属性。

    2.从搜索的结果可以看到,他们的父元素一样:<h3 class="t">

    3.标签都一样,且target属性也一样:<a target="_blank" 

    4.于是这里可以用css定位(当然用xpath也是可以的)


二、确认定位结果

    1.前面的定位策略只是一种猜想,并不一定真正获取到自己想要的对象的,也行会定位到一些不想要的对象。

    2.于是可以获取对象的属性,来验证下是不是定位准确了。这里可以获取href属性,打印出url地址

三、随机函数

    1.搜索结果有10条,从这10条中随机取一个就ok了

    2.先导入随机函数:import random

    3.设置随机值范围为0~9:a=random.randint(0~9)

四、随机打开url

    1.从返回结果中随机取一个url地址

    2.通过get方法打卡url

    3.其实这种方式是接口测试了,不属于UI自动化,这里只是开阔下思维,不建议用这种方法

五、通过click点击打开

    1.前面那种方法,是直接访问url地址,算是接口测试的范畴了,真正模拟用户点击行为,得用click的方法

# coding:utf-8

from selenium import webdriver

import random

driver = webdriver.Firefox()

driver.get("https://www.baidu.com")

driver.implicitly_wait(10)

driver.find_element_by_id("kw").send_keys(u"测试部落")

driver.find_element_by_id("kw").submit()

s = driver.find_elements_by_css_selector("h3.t>a")

# 设置随机值

t = random.randint(0, 9)

# 随机取一个结果点击鼠标

s[t].click()

 

不知道有小伙伴有没注意一个细节,前面在搜索框输入关键字后,我并没有去点击搜索按钮,而是用的submit的方法,submit相当于回车键。

具体的操作对象方法,下篇详细介绍。本篇主要学会定位一组对象,然后随机操作其中的一个。

在学习过程中有遇到疑问的,可以加selenium(python+java) QQ群交流:646645429

 

《selenium+python高级教程》已出书:selenium webdriver基于Python源码案例

(购买此书送对应PDF版本)

 

 

相关文章:

  • Chapter 2 Open Book——24
  • 如何造一个移动端的联动选择器(二)
  • JFinal输出流的Render
  • 剑指offer五:
  • Android开发环境
  • 移动端解决方案学习记录
  • 条件编译使用实例
  • sql server中分布式查询随笔(链接服务器(sp_addlinkedserver)和远程登录映射(sp_addlinkedsrvlogin)使用小总结)...
  • 架构设计从这5点考虑,能帮后期运维很大忙!
  • 安装最小化Linux,配置桌面
  • CentOS利用nginx和php-fpm搭建owncloud私有云
  • 【linux基础】17、网络属性配置详解
  • input type=file id=camera multiple=multiple capture=camera accept=image/* 上传图片,手机调用相册和摄像...
  • python面试大全
  • 最基本的操作
  • 【译】JS基础算法脚本:字符串结尾
  • 分享一款快速APP功能测试工具
  • [nginx文档翻译系列] 控制nginx
  • __proto__ 和 prototype的关系
  • avalon2.2的VM生成过程
  • const let
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Docker容器管理
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • java中的hashCode
  • Linux中的硬链接与软链接
  • PermissionScope Swift4 兼容问题
  • Ruby 2.x 源代码分析:扩展 概述
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 搭建gitbook 和 访问权限认证
  • 二维平面内的碰撞检测【一】
  • 前端相关框架总和
  • 无服务器化是企业 IT 架构的未来吗?
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 再次简单明了总结flex布局,一看就懂...
  • 带你开发类似Pokemon Go的AR游戏
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # Maven错误Error executing Maven
  • #Ubuntu(修改root信息)
  • (4) PIVOT 和 UPIVOT 的使用
  • (4)事件处理——(7)简单事件(Simple events)
  • (day6) 319. 灯泡开关
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Ruby)Ubuntu12.04安装Rails环境
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @RestControllerAdvice异常统一处理类失效原因
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [codeforces] 25E Test || hash
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档