了解 Selenium 定位方式
※元素定位的重要性:在于查找元素 And 执行元素
定位元素的三种方法
- 1、定位单个元素:在定位单个元素时,selenium-webdriver 提示了如下一些方法对元素进行定位。在这些定位方式中,优先使用id、name、classname,对于网上的链接元素,推荐使用linkText定位方式,对于不好定位的元素,考虑使用火狐的插件去辅助定位(xpath)。
- 2、定位多个元素
- 3、层级定位:层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。比较典型的应用是表格的定位。
findElement和findElements方法
findElement()返回一个WebElement元素
findElements()返回一个List,多个WebElement元素
八种定位方式
•By.id(id):通过ID 属性查找
•By.name(name):通过name属性查找
•By.className(className) :通过classname属性查找
•By.linkText(链接文本):通过链接文本
•By.partialLinkText(部分链接文本):通过部分链接文本
•By.cssSelector(Css路径):通过CSS路径
•By.tagName(name):通过tagname查找
•By.xpath(XPath路径):通过XPath查找
例如:id\name\classname

代码如下:
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; public class ZmbxTestJC {
@Test
public void Testid() throws InterruptedException {
WebDriver driver =new ChromeDriver();
String url = "https://www.baidu.com";
driver.get(url);
driver.findElement(By.name("wd")).sendKeys("Selenium");//定位到name,输入内容
driver.findElement(By.id("su")).click();//定位到id,点击百度一下查询内容
driver.quit();
}
}
例如:By.linkText(Link文本)
HTML 源码:
<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
WebElementelement =driver.findElement(By.linkText( "搜索设置" ));
例如:By.partialLinkText(部分链接文本)
HTML 源码:
<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
WebElementelement =driver.findElement(By. partialLinkText( "搜索" ));//搜索设置
例如:By.cssSelector(Css路径)
HTML 源码:
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
WebElementelement=driver.findElement(By. cssSelector( "#u1 > a:nth-child(1)" ));
例如:By.tagName(name)
HTML 源码:
<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
WebElementelement=driver.findElement(By. tagName( "a" ));
例如:By.xpath(XPath路径)
HTML 源码:
<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
WebElementelement=driver.findElement(By. xpath( "//*[@id="u1"]/a[1]" ));
注意:
1.使用findElement()方法查找元素,元素必须是唯一2.findElements()同样支持这八种定位方式,只是获取的是多个元素,返回List
XPATH介绍:
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
请看下面这个 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price></book>
</bookstore>
上面的XML文档中的节点例子:<bookstore> (文档节点)<author>J K. Rowling</author> (元素节点)lang="en" (属性节点)
选取节点
XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。
下面列出了最有用的路径表达式:
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点。 |
| / | 从根节点选取。 |
| // | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
| . | 选取当前节点。 |
| .. | 选取当前节点的父节点。 |
| @ | 选取属性。 |
实例,在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:
| 路径表达式 | 结果 |
|---|---|
| bookstore | 选取 bookstore 元素的所有子节点。 |
| /bookstore |
选取根元素 bookstore。 注释:假如路径起始于正斜杠( / ), 则此路径始终代表到某元素的绝对路径! |
| bookstore/book |
选取属于 bookstore 的子元素的所有 book 元素。 |
| //book |
选取所有 book 子元素,而不管它们 在文档中的位置。 |
| bookstore//book |
选择属于 bookstore 元素的后代的所 有 book 元素,而不管它们位于 bookstore 之下的什么位置。 |
| //@lang | 选取名为 lang 的所有属性。 |
XPath 轴
轴可定义相对于当前节点的节点集。
| 轴名称 | 结果 |
|---|---|
| ancestor | 选取当前节点的所有先辈(父、祖父等)。 |
| ancestor-or-self |
选取当前节点的所有先辈(父、祖父等)以及当前节点本身。 |
| attribute | 选取当前节点的所有属性。 |
| child | 选取当前节点的所有子元素。 |
| descendant | 选取当前节点的所有后代元素(子、孙等)。 |
| descendant-or-self | 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。 |
| following | 选取文档中当前节点的结束标签之后的所有节点。 |
| namespace | 选取当前节点的所有命名空间节点。 |
| parent | 选取当前节点的父节点。 |
| preceding | 选取文档中当前节点的开始标签之前的所有节点。 |
| preceding-sibling | 选取当前节点之前的所有同级节点。 |
| self | 选取当前节点。 |
详细了解xpath,请参照 https://www.w3school.com.cn/xpath/xpath_summary.asp
了解 Selenium 定位方式的更多相关文章
- selenium定位方式-获取标签元素:find_element_by_xxx
定位方式取舍# 唯一定位方式.多属性定位.层级+角标定位(离目标元素越近,相对定位越好) # 推荐用css selector(很少用递进层次的定位)# 什么时候用xpath呢? 当你定位元素时,必须要 ...
- selenium 定位方式
在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...
- python版本selenium定位方式(不止八种哦)
除了大家熟知的8种定位方式之外 1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class ...
- selenium定位方式-Xpath使用方法
什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 一. 在火狐浏览器上安装Xpath 方法如下: 1.使用 Firefox 访问 https://a ...
- selenium定位方式源码的存放位置
find_element方法源码存在位置 by定位方法
- selenium WebDriver 八种定位方式源码
/* * 多种元素定位方式 */ package com.sfwork; import java.util.List; import org.openqa.selenium.By; import or ...
- selenium的定位方式
1.selenium的定位方式 selenium有18种定位方式,8种单数,8种复数,2种父类 2.8种单数定位方式 from selenium import webdriverimport time ...
- python+selenium二:定位方式
# 八种单数定位方式:elementfrom selenium import webdriverimport time driver = webdriver.Firefox()time.sleep(2 ...
- selenium的基本定位方式总结
Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...
随机推荐
- Linux 的磁盘格式化、挂载、磁盘检验、df、du、fdisk、free命令的使用
df:列出文件系统的整体磁盘使用量du:检查磁盘空间使用量fdisk:用于磁盘分区 free:查看内存占用情况 一.df命令列出系统的整体磁盘使用量 df命令参数功能:检查文件系统的磁盘空间占用情况. ...
- P4921 【情侣?给我烧了!】
加强前这道题还是比较友好的 首先我们设\(g_x\)为x对情侣没有一对坐在一起的数量 然后答案就可以表示成:\(C_n^k*A_n^k*2^k*g_{n-k}\) 这里的复杂度是\(O(T*N)\), ...
- 洛谷P3178[HAOI]2015 树上操作
题目 树剖裸题,这个题更可以深刻的理解树剖中把树上的节点转换为区间的思想. 要注意在区间上连续的节点,一定是在一棵子树中. #include <bits/stdc++.h> #define ...
- realloc()函数
原型:extern void *realloc(void *mem_address, unsigned int newsize); 参数: mem_address: 要改变内存大小的指针名 newsi ...
- [golang]text/template模板
这个可以用来处理text文本,不过我更偏爱做成代码生成器. [golang]text/template模板 package main import ( "os" "tex ...
- Pytest权威教程16-经典xUnit风格的setup/teardown
目录 经典xUnit风格的setup/teardown 模块级别setup/teardown 类级别setup/teardown 方法和函数级别setup/teardown 返回: Pytest权威教 ...
- ES6中的class类的理解
传统的javascript中只有对象,没有类的概念.它是基于原型的面向对象语言.原型对象特点就是将自身的属性共享给新对象.这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的感脚!非常容易让人 ...
- redis 业务锁 not exist 模式
背景: 业务核心模块只能提交一次,原实现方案 前端加提交限制.后端加数据库业务逻辑判定,结果失效,api站点部署多台负载,切方法需要强求第三方接口 响应时间较慢 ,故放弃lock. 解决方案:redi ...
- 分布式缓存Redis集群搭建
redis安装 1.下载tar包至/opt/redis 2.解压tar包 tar -xvf redis-4.0.14.tar.gz 3. cd redis-4.0.14 make一下. 单节点的red ...
- 利用原生JS实时监听input框输入值
传送门https://www.cnblogs.com/lantinggumo/p/7636715.html 传送门https://www.cnblogs.com/nailc/p/8572226.htm ...