Webdriver处理页面元素的方式
Webdriver执行JavaScript代码的方式
WebDriver driver = new ChromeDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
1.直接传入JavaScript代码
jse.executeScript("window.open('" + String.format(detailsUrl,urlParam[0],urlParam[1],urlParam[2],urlParam[4],urlParam[3] ) + "')");
2.传入WebElement执行JS
WebElement webElement = webDriver.findElement(By.id("tab_2"));
jse.executeScript("arguments[0].click();", webElement);
WebDriver获取页面元素
id -->findElement(By.id(“id”))
class_name -->findElement(By.className("className"))
linkText -->findElement(By.linkText("Inbox"))
tagName -->findElement(By.tagName(“html的类别信息如button”))
css --> 1)绝对路径 在DOM中的具体位置
findElement(by.cssSelector(“html body div form input”))
或findElement(by.cssSelector(“html>body>div>form>input”))
2)相对路径
driver.findElement(By.cssSelector("input"));第一个input元素。
driver.findElement(By.cssSelector("input.login")); html标签.class的属性值
3)相对Id选择器
driver.findElement(By.cssSelector("input#username"));html标签#id
driver.findElement(By.cssSelector("#username"));只是#id
4)属性
driver.findElement(By.cssSelector("input[name=username]"));使用name属性
driver.findElement(By.cssSelector("img[alt='Previous']"));使用alt属性
driver.findElements(By.cssSelector("img[alt]"));通过属性名称查找,页面所有img含有alt属性的标签
driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));联合多个属性查询
driver.findElements(By.cssSelector("img:not([alt])"));使用伪类
5)部分属性 (对于页面上有动态变化的属性的元素是非常有用的)
driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id头部 如ctrl_12
driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id尾部 如a_ctrl
driver.findElement(By.cssSelector(Input[id *=‘ ctrl’]));匹配到id中间如1_ctrl_12
高级CSS
1)查询子元素
WebElement userName = driver.findElement(By.cssSelector("form#loginForm > input"));
WebElement userName = driver.findEleme(By.cssSelector("form#loginForm :nth-child(2)"));
:first-child 定位表单第一个子元素
:last-child 定位表单最后一个子元素
:nth-child(2) 定位表单中第二个子元素
2)使用伪类
driver.findElement(By.cssSelector("input:focus")); 也可使用hover active
:enable input:enable 定位属性为enable的input元素
:disable input:disable 定位属性为disable的input元素
:checked input:checked 定位有多选框属性为checked的元素
3)查询兄弟元素
driver.findElement(By.cssSelector("#nv a + b")); 定位到a 再定位到和它相邻的b
Xpath(可以向前向后查询DOM结构,css只能向前)
1)绝对路径
driver.findElement(By.xpath("html/body/div/div/form/input"));//如果发生结构改变则找不到
2)相对路径
driver.findElement(By.xpath("//input"));//假设在DOM中的第一个
3)使用索引
driver.findElement(By.xpath("//input[2]"));//找第二个input元素
4)属性值
driver.findElement(By.xpath("//input[@id='username']"));//使用id属性匹配
driver.findElement(By.xpath("img[@alt='Previous']"));//使用alt属性
driver.findElement(By.xpath ("//input[@type='submit'][@value='Login']"));//联合多个属性
WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'and @value='Login']"));//使用and联合查询
WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'or @value='Login']"));//使用or选择查询
5)属性名称
List imagesWithAlt = driver.findElements (By.xpath ("img[@alt]"));//使用属性名称 img中带有alt属性的元素
6)部分属性值
starts-with() --> driver.findElement(By.XPath(“input[starts-with(@id,’ctrl’)]”));
ends-with() -->driver.findElement(By.XPath(“input[ends-with(@id,’ctrl’)]”));
contains() --> starts-with() driver.findElement(By.XPath(“input[contains(@id,’ctrl’)]”));
7)使用值匹配任意元素属性值
driver.findElement(By.xpath("//input[@*='username']"));任意属性名称为username的元素
8)定位父元素或者兄弟元素
<section class="AutoTest">haha
<a title="testp" href="#"> testa</a>
<div style="#">WEB Auto Test ! </div>
</section>
WebElement elementNames =driver.findElement(By.xpath("//a[@title='testp']"));
System.out.println("elementNames.getText()"+elementNames.getText());
WebElement elementNamess =driver.findElement(By.xpath("//a[@title='testp']/parent::section"));
System.out.println("elementNamess.getText()"+elementNamess.getText());
WebElement elementName = driver.findElement(By.xpath("//a[@title='testp']/parent::section/div"));
System.out.println("elementName.getText()"+elementName.getText());
运行结果如下:
elementNames.getText()testa
elementNamess.getText()haha testa
WEB Auto Test !
elementName.getText()WEB Auto Test !
首先我们通过By.xpath("//a[@title='testp']"定位到节点a链接,
然后我们又通过parent::section定位到他父节点<section|> ,
又通过//a[@title='testp']/parent::section/div定位到了section的子节点 <div>
findElement将会查询整个DOM 最终返回第一个找到的匹配的元素
findElement可以查询子类,缩写为
driver.findElement(By.id("div1")).findElement(By.linkText("top"));
查找一个元素 查找这个元素下的子类top
当findElement找不到元素时。抛出NoSuchElementFoundException
findElements()方法返回所有匹配定位策略的WebElement的集合,我们可以使用Java中List类来创建WebElements的实例,实现查找多个元素:
List links = driver.findElements(By.cssSelector("#nv a"));
Webdriver处理页面元素的方式的更多相关文章
- Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同
一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...
- webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载
webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载 原文:https://my.oschina.net/u/2344787/blog/400 ...
- Python3.x:Selenium中的webdriver进行页面元素定位
Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- Java+selenium之WebDriver定位页面元素(二)
Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法: 单个对象的定位方法,多个对象的定位方法和层级定位 1. 定位单个元素 // 对于元素的属性包含 id 的情况适用,推 ...
- Java + Selenium + WebDriver八大元素定位方式
UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...
- selenium第三课(selenium八种定位页面元素方法)
selenium webdriver进行元素定位时,通过seleniumAPI官方介绍,获取页面元素的方式一共有以下八种方式,现按照常用→不常用的顺序分别介绍一下. 官方api地址:https://s ...
- 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器
对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...
- java selenium webdriver第二讲 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
随机推荐
- Python学习之==>迭代器
一.概要 在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set ...
- nginx报错:nginx: [emerg] unknown directive in /etc/nginx/conf.d/test.conf:4
nginx报错:nginx: [emerg] unknown directive in /etc/nginx/conf.d/test.conf:4 解决: 第四行出现了 tab 空格 , 换成正常的 ...
- 用Node开发桌面应用:NW.js和Electron
NW.js和Electron对比:[http://tangiblejs.com/posts/nw-js-electron-compared] NW.js:[https://nwjs.io/] Elec ...
- 【MM系列】SAP S/4 HANA 1511的BP角色创建及供应商数据的创建方法
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP S/4 HANA 1511的 ...
- 关于glog使用中遇到的问题
项目中需要打log,当初看到glog,觉得google出品应该差不了,而且简单易用,库不是很大,就选择他了. 但是在使用中还真的发现一些不顺手和库设计上的问题,反正和我的使用习惯有点不一样. 设置lo ...
- Jackson快速入门
1.Jackson的简单用法 2.Jackson框架的高阶应用 3.Jackson不支持Java8 Date解决方法 https://www.cnblogs.com/mkxzy/p/7091381.h ...
- 使用注解@CrossOrigin解决跨域问题
转一个大兄弟写的贴子,总结得很好,很全面 https://www.cnblogs.com/mmzs/p/9167743.html 作者: 淼淼之森
- spring boot-9.对springMVC的支持
1.thymeleaf spring boot 推荐的模板引擎是thymeleaf.spring boot 的自动配置已经默认配置好了themleaf,只要导入themleaf的Starter就可以了 ...
- Css设置最优先
input{ width: 220px !important; } css中 加上 !important 用一些前端框架,源文件修改不便时 可以这样用
- Vue 进阶系列(一)之响应式原理及实现
Vue 进阶系列(一)之响应式原理及实现:https://juejin.im/post/5bce6a26e51d4579e9711f1d Vue 进阶系列(二)之插件原理及实现:https://jue ...