selenium的使用

本文摘自https://blog.csdn.net/qq_22003641/article/details/79137327(此处主要介绍模拟鼠标用法,更多常用法法请点击查看)

1.selenium元素定位

Selenium提供了8种定位方式。

  • id
  • name
  • class name
  • tag name
  • link text
  • partial link text
  • xpath
  • css selector

这8种定位方式在Java selenium中所对应的方法为:

  • findElement(By.id())
  • findElement(By.name())
  • findElement(By.className())
  • findElement(By.tagName())
  • findElement(By.linkText())
  • findElement(By.partialLinkText())
  • findElement(By.xpath())
  • findElement(By.cssSelector())

2.定位方法的用法

<html><head><body link="#0000cc"><a id="result_logo" href="/" οnmοusedοwn="return c({'fm':'tab','tab':'logo'})"><form id="form" class="fm" name="f" action="/s"><span class="soutu-btn"></span><input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">
</from>
</body>
</html>

我们的目的是要定位input标签的输入框。

  • 通过id定位:

    driver.findElement(By.id("kw"))
  • 通过name定位:
    driver.findElement(By.name("wd"))
  • 通过class name定位:
    driver.findElement(By.className("s_ipt"))
  • 通过tag name定位:
    driver.findElement(By.tagName("input"))
  • 通过xpath定位,xpath定位有N种写法,这里列几个常用写法
driver.findElement(By.xpath("//*[@id='kw']"))
driver.findElement(By.xpath("//*[@name='wd']"))
driver.findElement(By.xpath("//input[@class='s_ipt']"))
driver.findElement(By.xpath("/html/body/form/span/input"))
driver.findElement(By.xpath("//span[@class='soutu-btn']/input"))
driver.findElement(By.xpath("//form[@id='form']/span/input"))
driver.findElement(By.xpath("//input[@id='kw' and @name='wd']"))
  • 通过css定位,css定位有N种写法,这里列几个常用写法:
driver.findElement(By.cssSelector("#kw")
driver.findElement(By.cssSelector("[name=wd]")
driver.findElement(By.cssSelector(".s_ipt")
driver.findElement(By.cssSelector("html > body > form > span > input")
driver.findElement(By.cssSelector("span.soutu-btn> input#kw")
driver.findElement(By.cssSelector("form#form > span > input")

接下来,我们的页面上有一组文本链接。

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>
  • 通过link text定位:
driver.findElement(By.linkText("新闻")driver.findElement(By.linkText("hao123")
  • 通过partialLink text定位:

    driver.findElement(By.partialLinkText("新")driver.findElement(By.partialLinkText("hao")driver.findElement(By.partialLinkText("123")

    注:关于xpaht和css的定位比较复杂,请参考: xpath语法、css选择器

3.控制浏览器操作

(1)控制浏览器窗口大小

有时候我们希望能以某种浏览器尺寸找开,访问的页面在这种尺寸下运行。例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估;WebDriver 提供了 manage().window().setSize()方法来设置浏览器的大小。

  • maximize() 设置浏览器最大化
  • setSize() 设置浏览器宽高

public class Browser {public static void main(String[] args) throws InterruptedException {WebDriver driver= new ChromeDriver();driver.get("https://www.baidu.cn");driver.manage().window().maximize();Thread.sleep(2000);driver.get("https://m.baidu.cn");driver.manage().window().setSize(new Dimension(480, 800));Thread.sleep(2000);driver.quit();}
}

在 PC 端执行自动化测试脚本大多的情况下是希望浏览器在全屏幕模式下执行, 那么可以使用 maximize()方法使打开的浏览器全屏显示, 其用法与 setSize()相同, 但它不需要任何参数。

(2)控制浏览器后退、前进

在使用浏览器浏览网页时,浏览器提供了后退和前进按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮。下面通过例子来演示这两个方法的使用。

  • back() 模拟浏览器后退按钮
  • forward() 模拟浏览器前进按钮

public class BrowserGo {public static void main(String[] args) throws InterruptedException {WebDriver driver = new ChromeDriver();//get 到百度首页driver.get("https://www.baidu.com/");System.out.printf("now accesss %s \n", driver.getCurrentUrl());Thread.sleep(2000);//点击“新闻” 链接driver.findElement(By.linkText("新闻")).click();System.out.printf("now accesss %s \n", driver.getCurrentUrl());Thread.sleep(2000);//执行浏览器后退driver.navigate().back();System.out.printf("back to %s \n", driver.getCurrentUrl());Thread.sleep(2000);//执行浏览器前面driver.navigate().forward();System.out.printf("forward to %s \n", driver.getCurrentUrl());Thread.sleep(2000);driver.quit();}
}

(3)刷新页面

  • refresh() 刷新页面(F5)
driver.navigate().refresh();

webDriver常用的方法本文主要介绍模拟鼠标操作

通过前面例子了解到,可以使用click()来模拟鼠标的单击操作,现在的Web产品中提供了更丰富的鼠标交互方式, 例如鼠标右击、双击、悬停、甚至是鼠标拖动等功能。在WebDriver中,将这些关于鼠标操作的方法封装在ActionChains类提供。
Actions 类提供了鼠标操作的常用方法:

  • contextClick() 右击
  • clickAndHold() 鼠标点击并控制
  • doubleClick() 双击
  • dragAndDrop() 拖动
  • release() 释放鼠标
  • perform() 执行所有Actions中存储的行为
  • import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.interactions.Actions;public class MouseDemo {public static void main(String[] args) {WebDriver driver = new ChromeDriver();driver.get("https://www.baidu.com/");WebElement search_setting = driver.findElement(By.linkText("设置"));Actions action = new Actions(driver);action.clickAndHold(search_setting).perform();driver.quit();}
    }

    导入提供鼠标操作的 ActionChains 类

  • Actions(driver) 调用Actions()类,将浏览器驱动driver作为参数传入。
  • clickAndHold() 方法用于模拟鼠标悬停操作, 在调用时需要指定元素定位。
  • perform() 执行所有ActionChains中存储的行为, 可以理解成是对整个操作的提交动作。

关于鼠标操作的其它方法:

import org.openqa.selenium.interactions.Actions;
……Actions action = new Actions(driver);// 鼠标右键点击指定的元素
action.contextClick(driver.findElement(By.id("element"))).perform();// 鼠标右键点击指定的元素
action.doubleClick(driver.findElement(By.id("element"))).perform();// 鼠标拖拽动作, 将 source 元素拖放到 target 元素的位置。
WebElement source = driver.findElement(By.name("element"));
WebElement target = driver.findElement(By.name("element"));
action.dragAndDrop(source,target).perform();// 释放鼠标
action.release().perform();

Java + Selenium 完成简单滑块验证学习之路(selenium的使用)(二)相关推荐

  1. Java + Selenium 完成简单滑块验证学习之路(破解无缺口滑块验证码)(三)

    破解无缺口滑块验证码 在学习完selenium 简单操作之后,继续我的破解之路.先看一下原网页页面.(灵魂打码重点看滑块) 破解这种无缺口滑块首先要找到滑块位置,根据selenium选择器去选择要拖动 ...

  2. python实现滑块验证功能_python3.8.1+selenium实现登录滑块验证功能

    python3.8.1+selenium解决登录滑块验证的问题,先给大家分享一个效果图,感觉不错,可以参考实现代码. 这里的滑块是qq邮箱的截图,如图所示,可以作为同类滑块验证的参考. "& ...

  3. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  4. selenium + python自动化测试unittest框架学习(五)webdriver的二次封装

    因为webdriver的api方法很长,再加上大多数的定位方式是以xpath方式定位,更加让代码看起来超级长,为了使整体的代码看起来整洁,对webdriver进行封装,学习资料来源于虫师的<se ...

  5. java spring框架怎么学_JAVA学习之路~spring框架(一)

    一.MVC思想M:Model 数据模型(javaBean实体类) V:View 视图(前端jsp,html等等) C:Controller 控制层(处理业务逻辑) 二.高级框架介绍Dao层: MyBa ...

  6. 小白的java学习之路 “ 选择结构(二)”

    switch 选择结构: 为什么使用switch选择结构: switch选择结构可以更好地解决等值判断问题. switch选择结构的四个关键字: switch    case    default   ...

  7. java 工程新建ivy文件_Hadoop学习之路(八)在eclispe上搭建Hadoop开发环境

    一.添加插件 将hadoop-eclipse-plugin-2.7.5.jar放入eclipse的plugins文件夹中 二.在Windows上安装Hadoop2.7.5 版本最好与Linux集群中的 ...

  8. JavaWeb学习之路——SpringBoot整合Mybatis(二)

    1)pom文件中添加相应的jar包: <!--Mybatis启动器--><dependency><groupId>org.mybatis.spring.boot&l ...

  9. 前端学习之路---node.js(二)

    知识点                                 下一篇    vue(一) 网站开发模型   + 黑盒子.哑巴   + 写代码让它变得更智能   + 按照你设计好的套路供用户使 ...

最新文章

  1. 近期活动盘点:2019第六届世界互联网大会、面向智慧城市的人本尺度城市形态:理论方法与实践讲座、高级管理人员AI大数据能力研修班...
  2. java中过滤器、监听器、拦截器的区别
  3. Laravel 5 4 实现前后台登录
  4. SQL表名,应该用复数还是单数
  5. iOS-仿智联字符图片验证码
  6. 十大笔记本品牌型号命名规则【联想】
  7. 1.3 Shell脚本编程基础之条件测试
  8. 联想服务器怎么使用无线网卡,Lenovo无线装置设置界面无法调节无线网卡
  9. 凉爽的天气,蓝蓝的天
  10. 消控中心人员配置_消控室的设置要求有哪些?
  11. 从零开始构建 RPM 包
  12. 你印象中的程序员是什么样子的?
  13. linaro 网站资源
  14. windows10下用PowerShell命令(Get-FileHash)校验文件的Hash值(MD5、SHA1、SHA256等)
  15. Self-attention(李宏毅2022
  16. Android开源项目以及开源库集合(持续更新中)
  17. iPad、iPad Pro反复自动重启怎么办?
  18. 2022 极术通讯-搭载“星辰”处理器的聆思科技CSK6视觉AI开发套件开发概览
  19. 每日总结(第一天)(2020/3/27/22:11)(1/90)
  20. 外卖返利小程序系统公众号外卖饿了么美团cps返利小程序分销系统

热门文章

  1. uniapp h5集成百度地图
  2. 前端三剑客之HTML初体验
  3. python打造记账本_python实现日常记账本小程序
  4. 清除Vs2010的工作区影射关系的缓存信息的文件夹路径
  5. 论文翻译:Observation of Gravitational Waves from a Binary Black Hole Merger(2016的PRL,诺奖论文)
  6. 使用QCustomPlot,跟随鼠标动态显示线上点的值
  7. 防抱死制动系统(ABS)-Simulink仿真
  8. 从零开始学Linux内核驱动--(二)简单内核模块驱动程序
  9. Spread for WPF-Silverlight 新功能使用指南
  10. linux 试题(包含答案)