网站首页 > 技术文章 正文
在使用Selenium做web自动化测试过程中,经常会遇到一些组件无法通过Selenium直接识别和处理,比如<input>标签组合的下拉框,比如日期控件。面对这些元素,我们可以引入JS注入技术来解决问题。
Javascript
JavaScript是一种被广泛用于Web前端开发的脚本语言 ,常用来为网页添加动态功能(弹窗,点击事件....)通过HTML DOM,JavaScript提供了页面对象获取和操作功能。
DOM模型把HTML文档解析成一棵树,根节点是<html>,从根节点往下根据节点之间的关系(顺序或包含)把节点解析为兄弟节点和孩子节点。<HTML> 节点有不同的类型:
- 元素
- 属性
- 文本
Javascript可以根据DOM结构获取任意的HTML元素,变更这些元素的属性,样式,并对元素的鼠标键盘事件做出响应:
- Javascript提供了通过id查找元素的方式:document.getElementById(id);除了id, javascript还支持通过类名和标签名查找元素
- Javascript提供通过innerHTML改变元素内容的方式:document.getElementById(id).innerHTML=new HTML,通过变更节点内部的HTML可以改变元素的文本和行为
- Javascript提供通过attribute改变元素属性的方式:document.getElementById(id).attribute=new value
Selenium支持Javascript
Selenium WebDriver可以被转换为JavaScriptExecutor,通过JavaScriptExecutor执行Javascript脚本,通过这种方式可以实现Selenium的Javascript注入,从而实现对复杂页面元素的操作。
WebDriver driver=new ChromeDriver();
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("js语句");
Jquery
Jquery是一个增强的JavaScript框架,它封装了JavaScript常用的功能代码,简化了HTML文档操作、事件处理、动画设计和Ajax交互。
对于复杂的网页元素查找,通过Javascript较为低效,此时可以引入Jquery简化元素查找。
Jquery常见选择器如下,详细语法课参见官网https://jquery.com/
Selenium支持Jquery
Selenium可以通过判定当前待测的网站是否引入Jquery,如果没有则加载Jquery,加载完毕以后即可用Jquery代码来实现前端页面元素的操作。
public class JqueryTest {
static JavascriptExecutor js;
static WebDriver driver;
public static void main(String[] args) {
driver=new ChromeDriver();
js=(JavascriptExecutor)driver;
driver.get("http://www.baidu.com/");
//判断Jquery是否存在,若不存在则注入
if(!jqueryLoaded()){
injectJquery();
}
//通过jquery查找出页面百度链接元素个数(.mnav)
List<WebElement> elements = (List<WebElement>) js
.executeScript("return jQuery.find('.mnav')");
driver.quit();
}
public static boolean jqueryLoaded() {
boolean loaded=false;
try {
loaded = (Boolean) js.executeScript("return" + " jQuery()!=null");
}catch (Exception e){
System.out.println("查找jQuery对象出现异常");
}
System.out.println("页面已存在Jquery对象,无需注入:" + loaded);
return loaded;
}
public static void injectJquery() {
js.executeScript(" var headID = "
+ "document.getElementsByTagName(\"head\")[0];"
+ "var newScript = document.createElement('script');"
+ "newScript.type = 'text/javascript';"
+ "newScript.src = "
+ "'http://code.jquery.com/jquery-latest.js';"
+ "headID.appendChild(newScript);");
}
}
- 上一篇: [Jsoup] HTML解析器,轻松获取网页内容
- 下一篇: 前端开发79条知识点汇总
猜你喜欢
- 2025-01-04 jQuery如何实现下拉菜单
- 2025-01-04 初学Vue(一) -- Vue简单入门
- 2025-01-04 jQuery入门看这一篇就够了!超详细!(三)
- 2025-01-04 「融职培训」Web前端学习 第4章 jQuery 2 jQuery常用方法
- 2025-01-04 Axure完成前端开发可行性探索
- 2025-01-04 JavaScript与jQuery: 前端开发的基石
- 2025-01-04 如何利用Java爬取网站数据?
- 2025-01-04 作为 Web 开发人员我踩过哪些技术的坑?
- 2025-01-04 有哪些相见恨晚的golang库
- 2025-01-04 day57:jQuery事件
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)