《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)

1.简介

   本文主要介绍两个在测试过程中可能会用到的功能:Actions类中的拖拽操作和Actions类中的划取字段操作。例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。

2.拖拽操作

  鼠标拖拽操作,顾名思义就是:就是鼠标按住将一个元素拖拽到另一个元素上。

2.1基础讲解
//鼠标拖动API,首先实例化一个对象,后边将用这个对象进行一系列操作
Actions action = new Actions(webdriver);
//source-要拖动的元素A,target-拖动元素A到达的目标元素B
action.dragAndDrop(source, target);
//source-要拖动的元素A,拖动元素移动多少,标准以元素A左上角为准,拖动元素相对元素A移到右边是x是正值,左边是负值,拖动元素相对元素A移到上边是y是负值,下边是正值,
action.dragAndDropBy(source, xOffset, yOffset);
例如:
//找到我们所要拖动的元素A和元素B
WebElement A = driver.findElement(By.xpath("//*[@id=\"ext-gen153\"]/li[1]/div"));
WebElement B=driver.findElement(By.xpath("//*[@id=\"ext-gen153\"]/li[2]/div"));
//实例化一个对象action
Actions action = new Actions(driver.getDriver());
//鼠标拖动A向左移动570,之后释放鼠标
action.dragAndDropBy(A, -570, 0).perform();
//鼠标拖动B向下移动100,向左移动570之后释放鼠标
action.dragAndDropBy(B, -570, 100).perform();
//注意:拖动元素之间最好加强制休眠时间,否则不定时出问题,也不报错
action.dragAndDrop(A, B).perform();
driver.sleep(2000);
action.dragAndDrop(B, A).perform();
//有时定位没问题,代码没问题,就是没效果,那就考虑一下拖拽在不同的浏览器的工作效果
//For firefox :
Actions builder = new Actions(driver);
builder.moveToElement(draggable).clickAndHold();
builder.moveToElement(target).click().perform();//For chrome :
Actions builder = new Actions(driver);
builder.moveToElement(draggable).clickAndHold(draggable);
builder.moveToElement(target).release(target).perform();
2.2项目实战

  宏哥这里JqueryUI网站的一个拖拽demo实战一下。

2.3代码设计

  代码设计如下:

2.4参考代码

    参考代码如下:

package lessons;import java.util.concurrent.TimeUnit;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;/*** @author 北京-宏哥* * 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)** 2021年9月29日*/
public class DraggOpration {public static void main(String[] args) throws Exception {  System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  WebDriver driver = new ChromeDriver();  driver.manage().window().maximize();  driver.manage().timeouts().implicitlyWait(8, TimeUnit.SECONDS);driver.get("http://jqueryui.com/resources/demos/droppable/default.html");  Thread.sleep(2000);// 定位能拖拽的元素WebElement move_ele = driver.findElement(By.id("draggable"));// 定位拖拽目标位置元素WebElement target_ele = driver.findElement(By.id("droppable"));Actions action = new Actions(driver);action.dragAndDrop(move_ele, target_ele).build().perform();// 验证拖拽成功if(driver.findElement(By.xpath("//*[@id='droppable']/p[text()='Dropped!']")).isDisplayed()){System.out.println("断言通过!");  }System.out.println(driver.findElement(By.xpath("//*[@id='droppable']/p[text()='Dropped!']")).isDisplayed());assert(driver.findElement(By.xpath("//*[@id='droppable']/p[text()='Dropped!']")).isDisplayed() == true);}
}
2.5运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.划取字段操作

   划取字段操作就是在一段文字中随机选中一段文字,或者在标记文字。当然了,这个在一些网站的登录也需要滑块验证等。

selenium中提供了ActionChains类来处理鼠标事件。这个类中有2个方法和滑块移动过程相关。

click_and_hold():模拟按住鼠标左键在源元素上,点击并且不释放

release():松开鼠标按键

字面意思就可以理解这2个函数的作用。

3.1项目实战1

   在一段文字中,随机划取一小段文字(这个感觉比较鸡肋,貌似没有什么卵用,但是宏哥还是说一下吧)。

3.2代码设计

   代码设计如下:

3.3参考代码

   参考代码如下:

package lessons;import java.util.concurrent.TimeUnit;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;/*** @author 北京-宏哥* * 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)** 2021年9月27日*/
public class SlipOpration {public static void main(String[] args) throws InterruptedException {System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");  WebDriver driver = new ChromeDriver();  driver.manage().window().maximize();driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);driver.get("https://www.baidu.com/duty/");//定位第一段文字WebElement Sting_Sected = driver.findElement(By.xpath("//*/p"));//定位第二段文字WebElement String_Second = driver.findElement(By.xpath("//*/ul[@class='privacy-ul-gap']/li[1]"));Actions action = new Actions(driver);action.clickAndHold(Sting_Sected).moveToElement(String_Second).perform();action.release();}
}
3.4运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

3.5项目实战2

   这里宏哥用携程旅行,手机号查单页面的一个滑动,进行项目实战。如下图所示:

3.6代码设计

   代码设计如下:

3.7参考代码

   参考代码如下:

package lessons;import java.util.concurrent.TimeUnit;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.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;/*** @author 北京-宏哥* * 《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)** 2021年9月30日*/
public class Test {public static void main(String[] args) throws InterruptedException {System.setProperty("webdriver.gecko.driver", ".\\Tools\\geckodriver.exe");WebDriver driver = new FirefoxDriver();  driver.manage().window().maximize();  driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);driver.get("https://passport.ctrip.com/user/member/fastOrder");Thread.sleep(2000);//定位滑块WebElement Sting_Sected = driver.findElement(By.xpath("//*[@class='cpt-drop-btn']"));//定位整个滑块框WebElement String_Second = driver.findElement(By.xpath("//*[@class='cpt-bg-bar']"));System.out.println(String_Second.getSize());Actions action = new Actions(driver);//action.clickAndHold(Sting_Sected).moveToElement(String_Second).perform();//action.release();action.dragAndDropBy(Sting_Sected, 279, 0).perform();action.release();//driver.quit();}    }
3.8运行代码

1.运行代码,右键Run AS->java Application,控制台输出,如下图所示:

2.运行代码后电脑端的浏览器的动作,如下小视频所示:

4.小结

4.1重中之重

拖动元素有一个最重要的前提是,你定位的xpath等一定要准确,否则,到时候会出现各种拖动错乱的问题:
1.拖动元素如果用到action.dragAndDropBy(k2, -570, 100).perform();比如,如果我们想把A元素(可能为图标)拖动到B区域可能用到这个方法,但是把A拖动到B区域之后,如果我们又想把此时的A拖动到其它地方,但是此时A没有id,class,只有一些看似没用的x,y,w,h,注意:这里一定要注意这里的这四个值,因为当我们刚开始调用action.dragAndDropBy(k2, -570, 100).perform();时,此时拖动完之后,那么绝对此时的x或者y或者w或者h一定是唯一值,那么我们抓住这个要点就可以定位了
2.定位参考:

WebElement A=driver.findElement(By.xpath("//*[contains(@x,'50')]"));

//"任务跨1"节点

WebElement B=driver.findElement(By.xpath("//*[contains(@y,'150')]"));
4.2总结

1.注意拖动之后属性的唯一性
2.dragAndDrop

// 鼠标拖拽动作,将 source 元素拖放到 (xOffset, yOffset) 位置,其中 xOffset 为横坐标,yOffset 为纵坐标。
action.dragAndDrop(source,xOffset,yOffset);
/*在这个拖拽的过程中,已经使用到了鼠标的组合动作,首先是鼠标点击并按住 (click-and-hold) source 元素,然后执行鼠标移动动作 (mouse move),
移动到 target 元素位置或者是 (xOffset, yOffset) 位置,再执行鼠标的释放动作 (mouse release)。所以上面的方法也可以拆分成以下的几个执行动作来完成:*/
action.clickAndHold(source).moveToElement(target).perform(); 
action.release();
4.3selenium 绕过检测机制

细心地小伙伴可能发现最后的滑动验证宏哥,用了火狐浏览器,没有用Chrome浏览器。那是因为宏哥的Chrome浏览器是最新的,目前还没有找到selenium绕过Chrome检测机制的办法(据说代理可以实现,但是宏哥这里没有亲自动手验证,毕竟文章不是讲解爬虫的不能偏离主题)。低版本的Chrome可以参考这篇文章进行绕过:java - Selenium webdriver: Modifying navigator.webdriver flag to prevent selenium detection - Stack Overflow。

4.4测试网站

测试链接:Antibot

正常浏览结果:

如果用Chrome浏览器,就会出现selenium检查机制,如下图所示:

 宏哥然后在这个页面用网址监测一下,没有绕过Chrome的selenium反爬虫检测机制,如下图所示:

   好了,时间不早了,今天就分享和讲解到这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文本向量评测MTEB和C-MTEB

文章目录 简介MTEBC-MTEB参考资料 简介 MTEB(Massive Text Embedding Benchmark)是目前评测文本向量很重要的一个参考,其榜单也是各大文本向量模型用来展示与其他向量模型强弱的一个竞技台。 C-MTEB则是专门针对中文文本向量的评测基准。 MTEB MTEB的目的是为了…

vuepress-theme-vdoing博客搭建教程

搭建流程 前言 这是笔者搭建个人博客所经历的流程,特附上笔记 笔者个人博客地址:沉梦听雨的编程指南 一、主题介绍 本博客使用的主题为:vuepress-theme-vdoing,相关介绍和使用方法可以参考该主题的官方文档 官方文档快速上手…

什么是PROFIBUS DP网络布线的1米原则?分支线又是什么?

在上期的文章中,我们介绍了 PROFIBUS DP 网络在连接时涉及到的硬件:DP 线缆、PROFIBUS 插头、终端电阻、中继器和有源终端等。 在今天的文章中,就让我们了解一下在 PROFIBUS DP 网络布线时,需要注意的原则有哪些。 一米原则 当 …

图分割 Graph Partition 学习笔记2

文章目录 前言一、Metis原理二、Metis优点三、Metis软件包安装流程参考链接 前言 今天来学一下Metis算法,经过搜索发现这个算法还是蛮多人在讲解的,我也在这里浅浅记录一下~ 一、Metis原理 METIS是一种层次化的分割算法(multi-level partitio…

梯度剪裁: torch.nn.utils.clip_grad_norm_()

梯度剪裁: torch.nn.utils.clip_grad_norm_() 一、原理 pytorch中梯度剪裁方法为 torch.nn.utils.clip_grad_norm_(parameters, max_norm, norm_type2)1。三个参数: parameters:希望实施梯度裁剪的可迭代网络参数 max_norm:该组网络参数梯…

勾八头歌之数据科学导论—数据采集实战

一、数据科学导论——数据采集基本概念 第1关:巧妇难为无米之炊 第2关:数据采集概念与内涵 二、数据科学导论——数据采集实战 第1关:单网页爬取 import urllib.request import csv import re# ********** Begin ********** # dataurllib.r…

java项目安全性与权限管理实践与探讨

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 一. 身份验证和授权 二. 输入验证和过滤 2.1. 添加OW…

电机应用-步进电机进阶驱动

步进电机梯形加减速 什么是梯形加减速 假设该装置使用步进电机实现物体X的移动,系统要求从A点出发,到B点停止,移动的时间越短越好且系统稳定。 根据步进电机的特性,最大程度加大电机转速(提高脉冲频率)&a…

10.Java---clone+内部类

一次浅拷贝的过程 打印结果: 一次深拷贝的过程 打印结果: 抽象类和接口的区别 外部类&内部类 1.内部类由static修饰时,不可以是变量 这样就是可以的,他就代表一个常量 2.怎么实例化内部类 当然不可以直接实例化啦! 是这么实例化的,看起来比我们平时麻烦了很多呢! …

SpringCloud OpenFeign 服务接口调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅,从传统的模块之间调用,一步步的升级为 SpringCloud 模块之间的调用,此篇文章为第四篇,即介绍 Feign 和 OpenFeign 服务接口调用。 二、概述 2.1 Feign 是什么 Feign 是一…

C++程序设计-练手题集合【期末复习|考研复习】

前言 总结整理不易,希望大家点赞收藏。 给大家整理了一下C程序设计中的练手题,以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门: 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函数…

dolphin schedulerAPI调用(二)——创建任务

(作者:陈玓玏) API文档地址:http://192.168.3.100:21583/dolphinscheduler/swagger-ui/index.html?languagezh_CN&langcn#/task%20definition%20related%20operation/createTaskDefinitionUsingPOST_1 实际使用中&#x…

场的概念---数量场(标量场)和矢量场介绍理解

目录 一、场的概念 二、场的分类 三、数量场(标量场)的等值面 四、矢量场中的矢量线 矢量线方程推导: 一、场的概念 场在数学上是指一个向量到另一个向量或数的映射。场指物体在空间中的分布情况。场是用空间位置函数来表征的。在物理学…

雾锁王国专用服务器设置方法,基于阿里云1分钟开服!

阿里云雾锁王国服务器搭建教程是基于计算巢服务,3分钟即可成功创建Enshrouded游戏服务器,阿里云8核32G雾锁王国专用游戏服务器90元1个月、271元3个月,阿里云服务器网aliyunfuwuqi.com亲自整理雾锁王国服务器详细搭建教程: 一、前…

全自动内衣洗衣机什么牌子好?热心推荐四款全能硬核的内衣洗衣机

内衣洗衣机这一产品是专为有特殊需求的人士所研发的,其的容量往往都比较小,并且体积也很小巧,安装都非常便捷,作为“家中第二台”补充式洗衣机被很多人推崇,可以作为贴身衣物的专用洗衣机,那么这种内衣洗衣…

Kutools For Excel | 新增 300+ 高级功能

Kutools For Excel 是一个便捷的 Excel 插件,具有 300 多种高级功能,可将各种复杂的任务简化为在 Excel 中的几次单击。 功能强大且用户友好的加载项将为 Excel 用户节省大量工作时间,并大大提高工作效率。支持 Excel 2021 / 2019 / 2016 / …

【Linux】调试工具 - gdb

目录 一、gdb概述: 二、list(查看源文件代码): 三、run(运行程序): ​四、断点相关操作: 1、查看断点: 2、在指定行设置断点: 3、在函数入口处设置断…

[计算机效率] 便笺的使用

2.4 便笺 便笺程序是一种方便用户记录、查看和编辑便签的简单应用程序。在Windows系统中,便笺通常作为系统自带的实用工具之一,可以帮助用户快速创建、编辑和组织便签,以便随时记录重要的信息、任务或提醒事项。 便笺程序通常具有以下特点&a…

阿里云企业2核4G5M服务器ECS u1性能测评

阿里云服务器ECS u1实例,2核4G,5M固定带宽,80G ESSD Entry盘优惠价格199元一年,性能很不错,CPU采用Intel Xeon Platinum可扩展处理器,购买限制条件为企业客户专享,实名认证信息是企业用户即可&a…

Metasploit(MSF)使用教程(以ms17_010永恒之蓝为例)

一.Metasploit简介: Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称MSF。是一个免费、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数2000多个已知软件漏洞的专业级漏洞攻击工…