selenium 定位元素

findElement()方法:当开始寻找符合指定条件的元素时,它将查询整个DOM,然后返回第一个找到的匹配元素。

By id:通过元素ID属性定位元素//driver.findElement(By.id("XXXX"));

By name: 通过元素Name属性定位元素//driver,findElement(By.name("XXXX"));

By className:通过元素classname属性定位元素//driver.findElement(By.className("XXXX"));

By tagName:通过HTML标记名定位元素//driver.findElement(By.tagName("XXXX"));

By linkText:通过文本定位链接//driver.findElemen(By.linkText("XXXX"));

By partialLinkText:通过部分文本定位链接//driver.findElement(By.partialLinkText("XXXX"));

By cssSelector:通过CSS定位元素//driver.findElement(By.cssSelector("XXXX"));

By xpath:通过Xpath定位元素//driver.findElement(By.xpath("XXXX"));

dom定位:DOM(Document Object Model)被用于描述HTML文档,可以使用JavaScript来访问。DOM定位策略通过JavaScript评估页面上的元素,可以使用分级符号简化元素定位。

《定位优先顺序:id.name.classname>css>xpath》

备注1:查询子类元素

我们第一步可以先定位到其父元素 <div>然后再定位其子元素,方 法如下:

WebElement div =driver.findElement(By.id("div1"));

WebElement topLink = div.findElement(By.linkText("top"));

缩写:

WebElement topLink =driver.findElement(By.id("div1")).findElement(By.linkText("top"));

2.使用findElements方法定位元素

driver.get("http://www.baidu.com");

List<WebElement> links =driver.findElements(By.cssSelector("#nv a"));

//验证链接数量

assertEquals(10,links.size());

//打印href属性

for(int i :links.size()){

System.out.println(links.get(i).getAttribute("href"));

}

备注:findElements()方法返回所有匹配定位策略的WebElement的集合,我们可以用java中的List类来创建WebElements的实例

List类中的size()方法会统计集合中元素的总数量

通过for循环将得到List中的所有元素,再调用getAttribute()方法得到元素的属性。

3.使用CSS选择器定位元素

3.1、css常用符号:

  #  表示id

  .  表示class

  >  表示子元素,层级

     一个空格也表示子元素,但是是所有的后代子元素,相当于xpath中的相对路径

例子:

<div class="input_class" type="text" name="passwd" id="passwd-id" />

  #input          选择id为passwd-id的节点

  .input_class        选择class为input_class的节点

  div#passwd-id>input   选择id为passwd-id的div下的所有的input节点

  div#passwd-id input    选择id为passwd-id的div下的所有的input节点

  div.input_class[name=‘passwd‘]     选择class为input_class并且name为passwd的节点

  div[name=‘passwd‘][type=‘text‘]    选择name为passwd且type为text的节点

4.使用xpath定位元素

     /   表示绝对路径绝对路径是指从根目录开始

  //   表示相对路径

  .   表示当前层

  ..   表示上一层

  *   表示通配符

  @   表示属性

  []   属性的判断条件表达式

xpath常用函数:

  contains ():  //div[contains(@id,‘widget‘)],选择id属性中包含‘widget‘的div

  text():    //a[text()=‘hello world‘],选择文本值为‘hello world‘的节点

  last():    选择最后一个

  starts-with():  //div[starts-with(@id,‘common‘)] ,选择id属性中’common’开头的div节点  

  not():    否定

5.定位表格行和单元

</pre><pre name="code" class="java">driver.get("http://www.w3school.com.cn/html/html_tables.asp");
List<WebElement> rows=driver.findElements(By.cssSelector(".dataintable>tr"));
//验证表格的行数
assertEquals(11,rows.size());
//打印出所有单元格的数据
for (WebElement row : rows){
//得到当前tr里td的集合
List <WebElemnt> cols=rows.findElements(By.tagName("td"));
for(WebElement col :cols){
System.out.print(col.getText());//得到td里面的文本
}System.out.println();
}driver.close();
</pre><span style="color: rgb(102, 102, 204); background-color: rgb(255, 204, 0);"><strong>6.定位表格中的子元素</strong></span>对于下方一个表格:<p></p><p><img src="https://img-blog.csdn.net/20151222175208239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p>表格代码:</p><p><span style="white-space:pre"></span></p><pre name="code" class="html"><tr>
<td>Nash</td>
<td><a href="mailto:[email protected]">[email protected]</a></td>
<td>
<div>
<label for="user128_admin">Admin</label>
<input type="checkbox" id="user128_admin" checked="true"/>
<label for="user128_cm">Content Manager</label>
<input type="user128_browser">Browser</label>
<input type="checjbox" id ="user128_browser"/>
</div>
</td>
</tr>

原文地址:https://www.cnblogs.com/coco-fly/p/9531245.html

时间: 2024-08-03 04:41:18

selenium 定位元素的相关文章

[Python 应用: 爬虫] Selenium 定位元素方法

本文内容摘自:https://selenium-python.readthedocs.io/locating-elements.html 定位元素有很多种方式,你可以选择适合你使用情况的.Selenium 提供如下几种定位元素的方式: find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_partial_link_text find_eleme

Selenium定位元素

Commands (命令) Action对当前状态进行操作失败时,停止测试 Assertion校验是否有产生正确的值 Element Locators指定HTML中的某元素 Patterns用于模式匹配 1. Element Locators (元素定位器) id=idid locator 指定HTML中的唯一id的元素 name=namename locator指定 HTML中相同name的元素中的第一个元素 identifier=ididentifier locator 首先查找HTML是否

python+selenium 定位元素

一.安装python1.配置环境变量c:\python27:C:\Python27\Scripts2.验证pyton是否可用,在cmd里面输入python没报错就行 二.安装selenium库4.安装selenium:在cmd里面,输入:pip install selenium 三.对应于webdriver中的定位方法分别是: driver.find_element_by_name()--最常用,简单 driver.find_element_by_id()--最常用,简单 driver.find

Selenium 定位元素的8种方法介绍

简介 我们在做web自动化测试时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.所以我们依据元素来定位它们. 一.查看页面元素 用谷歌浏览器打开百度首页(按键F12),或者点击右上角>更多工具>开发者工具,就可以看到整个页面的html代码了 二.方法介绍 1.id定位: find_element_by_id() from selenium import webdriverimport timedriver

selenium 定位元素方式大全

starts-with 顾名思义,匹配一个属性开始位置的关键字 contains 匹配一个属性值中包含的字符串 text() 匹配的是显示文本信息,此处也可以用来做定位用 eg //input[starts-with(@name,'name1')]     查找name属性中开始位置包含'name1'关键字的页面元素 //input[contains(@name,'na')]         查找name属性中包含na关键字的页面元素 <a href="http://www.baidu.c

selenium定位元素的八种方法

web driver提供了八种元素定位的方法: id, name, class name, tag name, link text, partial link text, xpath, css selector 如百度首页,百度一下按钮的元素信息 <input type="submit" id="su" value="百度一下" class="bg s_btn"> 百度首页新闻的页面的元素信息 <a href

selenium定位元素提示‘元素不可见’问题解决方法

最近在使用selenium的过程中发现有元素能够在页面中查找到,但是pycharm中运行时始终报错element not visible,于是使用如下方法成功解决问题. 1.driver.find_element_by_xpath("").is_displayed() 首先使用is_displayed()方法查看这个元素,发现返回的是False,说明该元素不可见.2.浏览器中查看到该元素没有什么不可见的属性,那么再往上找,发现父元素中有一个dispaly:none.3.通过js语句修改

pythonGUI自动化:selenium定位元素方式及元素动作

单个元素 1. 通过id定位:wd.find_element_by_id() 2. 通过name定位:wd.find_element_by_name() 3. 通过class定位:wd.find_element_by_class_name() 4. 通过tag定位:wd.find_element_by_tag_name() 5. 通过link定位:wd.find_element_by_link_text() 6. 通过partial_link定位:wd.find_element_by_parti

Selenium定位不到指定元素原因之iframe(unable to locate element)

浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点击之前需要通过selenium提供的“方法”去定位到要点击的元素: 模拟登陆过程中,全程都可以定位到需要点击的元素,但登陆后需要定位点击[上传]按钮时问题来了: 元素明明在那放着,就是定位不到,这个问题困扰了一下午还没解决,最终走到了iframe这个一步,才得以解决. 什么是iframe 解决问题之前很有必要