您的位置 首页 > 数码极客

[selenium如何使用js定位a元素]selenium定位js弹出框!

在使用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常见选择器如下,详细语法课参见官网



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(";);
//判断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){
Sy("查找jQuery对象出现异常");
}
Sy("页面已存在Jquery对象,无需注入:" + loaded);
return loaded;
}

public static void injectJquery() {
js.executeScript(" var headID = "
+ "document.getElementsByTagName(\"head\")[0];"
+ "var newScript = document.createElement('script');"
+ "newScri = 'text/javascript';"
+ "newScri = "
+ "';;"
+ "(newScript);");
}

}

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“selenium如何使用js定位a元素,selenium定位js弹出框,selenium,js定位元素,selenium定位js加载的元素”边界阅读