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

Selenium入门之元素的基本定位以及操作

为什么80%的码农都做不了架构师?>>>   hot3.png

1. 元素的定位

Selenium自动化,我们需要做的最基本的事情就是在页面找到元素,并通过脚本程序去操作这个元素,实现模拟人操作。我们有多种定位元素的方式可以选择:

通过元素的ID定位元素:

findElement(By.id(element));

通过元素的名称定位元素:

findElement(By.name(element));

通过元素的html中的位置定位元素:

findElement(By.xpath(element));

通过元素的标签名称定位元素:

findElement(By.tagName(element));

通过元素的链接名称定位元素:

findElement(By.linkText(element));

通过元素的类名定位元素:

findElement(By.className(element));

通过元素的css定位元素:

findElement(By.cssSelector(element));

通过元素的部分链接名称定位元素:

findElement(By.partialLinkText(element));

2. 元素的操作

不同的元素我们进行不同的操作,按钮的点击、输入框的字符输入、或者是元素的内容获取,不同的元素我们操作的方式不一。

对ID为element的元素进行点击操作:

driver.findElement(By.id(element)).click();

对ID为element的元素进行发送字符操作:

driver.findElement(By.id(element)).sendKeys(“XXXXXX”);

这是最简单的两例元素的操作,其实我们还有许多的操作,可以去慢慢的探索脚本的实现方式,比如页面title的获取、浏览器标签的切换等等

attachments-2016-07-bEAn3Sa4577cfa3eb9d3

如图,“关于oppo”元素在一个鼠标悬浮菜单下面,直接定位元素是定位不到的,这里则需要几部操作才能定位到元素, 需要用到Selenium提供的一个强大的用于真实的模拟用户交互的一个类:Actions

 

Actions action = new Actions(driver);

Tools tool=new Tools();

boolean flag=true;

driver.get("http://www.oppo.com/cn/");

//鼠标悬浮在品牌导航标签上面  action.moveToElement(driver.findElement(By.xpath("html/body/header/div[2]/div/div[2]/nav/div/ul/li[3]/a/span[1]"))).perform();

tool.ms(1000);    driver.findElement(By.xpath("html/body/header/div[2]/div/div[2]/nav/div/ul/li[3]/ul/li[1]/a")).click();

tool.ms(1000);

代码中的tool.ms(1000);其实是就是使用Thread.sleep(long millis); 使得当前线程休眠一1m,等待上一步骤响应完成。

attachments-2016-07-o57Buo7V577cfa5783d1

Actions这个类提共了一系列的API供模拟交互:

keyDown : 用于模拟按键被按下

  keyUp : 用于模拟按键松开

  doubleClick : 用于模拟双击

  clickAndHold : 用于模拟鼠标左键点住不放开

  release : 用于模拟松开鼠标,与clickAndHold相配合

  moveToElement : 将鼠标移动至元素的中间位置

  contextClick : 模拟鼠标右键点击

  dragAndDrop : 拖拽

3. 小结

元素操作的步骤:

步骤一: 确定元素的定位方式(调试更改)

步骤二: By element=(By.xpath(XX/XX));

步骤三: WebElement fdelement= driver.findElement(element);

步骤四: fdelement.click();

转载于:https://my.oschina.net/hibony/blog/712900

相关文章:

  • 阿里规约插件的安装和使用
  • Tomcat结构及处理请求过程
  • Spark Rdd coalesce()方法和repartition()方法
  • 基于Oracle的SQL优化--学习(一)
  • 基于Oracle的SQL优化--学习(二)
  • MySQL案例-show fileds from 提示无权限
  • B+树的数据结构理解
  • 基于Oracle的SQL优化--学习(三)
  • 打 spice 的 deb 格式安装包的时遇到的问题和解决方法
  • 基于Oracle的SQL优化--学习(四)
  • 基于Oracle的SQL优化--学习(五)
  • 基于Oracle的SQL优化--学习(六)
  • (转载)hibernate缓存
  • 基于Oracle的SQL优化--学习(七)
  • 基于Oracle的SQL优化--学习(八)
  • 【译】JS基础算法脚本:字符串结尾
  • 《Java编程思想》读书笔记-对象导论
  • Angular 4.x 动态创建组件
  • chrome扩展demo1-小时钟
  • ECMAScript6(0):ES6简明参考手册
  • in typeof instanceof ===这些运算符有什么作用
  • Iterator 和 for...of 循环
  • Java 内存分配及垃圾回收机制初探
  • Java|序列化异常StreamCorruptedException的解决方法
  • laravel 用artisan创建自己的模板
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • 初探 Vue 生命周期和钩子函数
  • 服务器之间,相同帐号,实现免密钥登录
  • 构建工具 - 收藏集 - 掘金
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于字符编码你应该知道的事情
  • 简单实现一个textarea自适应高度
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 三分钟教你同步 Visual Studio Code 设置
  • 探索 JS 中的模块化
  • 系统认识JavaScript正则表达式
  • 一、python与pycharm的安装
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (C++)八皇后问题
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (WSI分类)WSI分类文献小综述 2024
  • (独孤九剑)--文件系统
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十)c52学习之旅-定时器实验
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)基于IDEA的JAVA基础12
  • (转)德国人的记事本
  • .bat批处理(三):变量声明、设置、拼接、截取