※元素定位的重要性:在于查找元素 And 执行元素

定位元素的三种方法

  • 1、定位单个元素:在定位单个元素时,selenium-webdriver 提示了如下一些方法对元素进行定位。在这些定位方式中,优先使用id、name、classname,对于网上的链接元素,推荐使用linkText定位方式,对于不好定位的元素,考虑使用火狐的插件去辅助定位(xpath)。
  • 2、定位多个元素
  • 3、层级定位:层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。比较典型的应用是表格的定位。

findElement和findElements方法

  1. findElement()返回一个WebElement元素

  2. 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 定位方式的更多相关文章

  1. selenium定位方式-获取标签元素:find_element_by_xxx

    定位方式取舍# 唯一定位方式.多属性定位.层级+角标定位(离目标元素越近,相对定位越好) # 推荐用css selector(很少用递进层次的定位)# 什么时候用xpath呢? 当你定位元素时,必须要 ...

  2. selenium 定位方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  3. python版本selenium定位方式(不止八种哦)

    除了大家熟知的8种定位方式之外 1.id定位:find_element_by_id(self, id_)2.name定位:find_element_by_name(self, name)3.class ...

  4. selenium定位方式-Xpath使用方法

    什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 一. 在火狐浏览器上安装Xpath 方法如下: 1.使用 Firefox 访问 https://a ...

  5. selenium定位方式源码的存放位置

    find_element方法源码存在位置 by定位方法

  6. selenium WebDriver 八种定位方式源码

    /* * 多种元素定位方式 */ package com.sfwork; import java.util.List; import org.openqa.selenium.By; import or ...

  7. selenium的定位方式

    1.selenium的定位方式 selenium有18种定位方式,8种单数,8种复数,2种父类 2.8种单数定位方式 from selenium import webdriverimport time ...

  8. python+selenium二:定位方式

    # 八种单数定位方式:elementfrom selenium import webdriverimport time driver = webdriver.Firefox()time.sleep(2 ...

  9. selenium的基本定位方式总结

    Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css selector 这8种定位方 ...

随机推荐

  1. webuploader+php如何实现分片+断点续传

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  2. linux 安装gcc 和 g++

    以CentOS为例,安装后是没有C语言和C++编译环境的,需要手动安装,最简单的是用yum的方式安装,过程如下: 1.安装gcc yum install gcc 询问是否,按y键回车即可,或者 yum ...

  3. 数码管一些列功能的verilog实现

    将数码管各段发光元件的正极连在一起称为共阳数码管,且该共点击链接电路电源的正极,而各段的负极连接驱动电路.它适用于低电平有效的驱动电路,当某段的驱动电平为低电平时,该段发亮:将数码管各段发光元件的负极 ...

  4. COGS 1151 活动安排

    - 有 N 场活动,每场活动在特定的时间需要占用场地. - 如果有两场活动需要同一时间占用场地,则不能同时举行 - 问最多能举行多少场活动? 将所有活动按照结束时间从早到晚排序后贪心即可 具体思路看代 ...

  5. 使用pytesseract进行图像识别

    引言 对于简单验证码及一些图像的识别,我们需要使用pytesseract及相应的Tesseract引擎,它是开源的OCR引擎.帮助我们做一些简单的图像识别 当然为了更好将图片识别,对一些像素比较低的图 ...

  6. firefox设置

    如果长期使用linux(我常使用的是fedora)的朋友,就会知道,默认情况下,只要是这台linux再内网,开机几个小时后就无法再访问 google 和webqq 这些网站了并且打开一些网站也是要话上 ...

  7. OpenCV Facial Landmark Detection 人脸关键点检测

    Opencv-Facial-Landmark-Detection 利用OpenCV中的LBF算法进行人脸关键点检测(Facial Landmark Detection) Note: OpenCV3.4 ...

  8. 第十一周助教工作总结——NWNU李泓毅

    助教博客链接:https://www.cnblogs.com/NWNU-LHY/ 本次作业的要求:原型设计:https://www.cnblogs.com/nwnu-daizh/p/10761596. ...

  9. 狼人杀面杀APP(FGUI教程)

    本教程为FairyGUI进阶教程,这是一套完整的面杀桌游APP.游戏不仅有发放随机身份的功能,还涉及10个页面的切换与各页面不同状态(最多达9种状态)的切换,众多复杂UI的交互,多语言切换,3D粒子在 ...

  10. JVM 初始化阶段例子

    创建如下Demo package com.example.jvm.classloader; class Parent{ static int a = 3; static { System.out.pr ...