selenium的定位方式

第1种方法:通过绝对路径做定位(相信大家不会使用这种方式)

By.xpath("html/body/div/form/input")

By.xpath("//input")

第2种方法:通过元素索引定位

By.xpath("//input[4]")

第3种方法:使用xpath属性定位

By.xpath("//input[@id=‘kw1‘]")

By.xpath("//input[@type=‘name‘ and @name=‘kw1‘]")

第4种方法:使用部分属性值匹配(最强大的方法)

By.xpath("//input[starts-with(@id,‘nice‘)
By.xpath("//input[ends-with(@id,‘很漂亮‘)
By.xpath("//input[contains(@id,‘那么美‘)]")

starts-with  顾名思义,匹配一个属性开始位置的关键字

contains    匹配一个属性值中包含的字符串

text()         匹配的是显示文本信息,此处也可以用来做定位用

举例

//input[starts-with(@name,‘name1‘)]                   查找name属性中开始位置包含‘name1‘关键字的页面元素

//input[contains(@name,‘na‘)]                              查找name属性中包含na关键字的页面元素

<a href="http://www.baidu.com">百度搜索</a>,那么xpath写法为 //a[text()=‘百度搜索‘]     或者    //a[contains(text(),"百度搜索")]

三.有时候切换到iframe可能会遇见的问题

当然实际情况中会遇到没有id属性和name属性为空的情况,这时候就需要先定位iframe元素对象,这里可以通过tag先定位到,也能达到同样效果。

如下代码:

iframe = driver.find_element_by_tag_name("iframe")

driver.switch_to_frame(iframe)

(1) 切换完了之后,就可以去正常定位iframe里面的元素,driver.find_element_by_tagname(table) 之类的,同时也可以用xpath的方式:例如 Xpath=//*[contains(@src, ‘sysmanage/systemupgrade.action‘)]

(2) 如果有多个iframe标签,那你就要看看总共有iframe标签了,看看你所定位的iframe是数组中的第几个iframe元素(从0开始数起,基于JavaScript的),可以用chrome浏览器的F12的控制台(Console)就可以输入document.getElementsByTagName(‘iframe‘).length这句代码,即可打印出iframe的长度(也就是个数),然后按照从0开始数起。

(3)当iframe上的操作完后,想重新回到主页面上操作元素,这时候,就可以用switch_to_default_content()方法返回到主页面。

如下代码:

iframe = driver.find_element_by_tag_name("iframe")

driver.switch_to_frame(iframe)

switch_to_default_content()

(4)如何判断元素是否在iframe上?

1.定位到元素后,切换到firepath界面。
2.看firebug工具左上角,如果显示Top Window说明没有iframe。
3.如果显示iframe#xxx这样的,说明在iframe上,#后面就是它的id。

四.selenium用javascript定位

除了id是定位到的是单个element元素对象,其它的都是elements返回的是list对象
1.通过id获取
document.getElementById(“id”)

2.通过name获取

document.getElementsByName(“Name”)

返回的是list
3.通过标签名选取元素
document.getElementsByTagName(“tag”)
4.通过CLASS类选取元素
document.getElementsByClassName(“class”)
兼容性:IE8及其以下版本的浏览器未实现getElementsByClassName方法
5.通过CSS选择器选取元素
document.querySelectorAll(“css selector")
兼容性:IE8及其以下版本的浏览器只支持CSS2标准的选择器语法

js = ‘document.getElementById("helloId").click();‘

driver.execute_script(js)

js1 = ‘document.getElementsByClassName("helloName")[0].value = "王大明";‘   //整个HTML文档里第一个使用CSS样式类的class="helloName"属性,它的value属性的值设置为“王大明”

driver.execute_script(js1)

JQuery是2006年1月诞生的一个基于封装JavaScript的框架,你经常看到的美元符号带上一个圆括号$(‘XXX‘),其实就是document.getElementBy什么什么的这个js方法,至于XXX前面带.的话,就是document.getElementByClass,带#的话,就是document.getElementById

6.xpath的语法使用基础

Xpath的使用方法:

 例子 1:html/body/div[1]/div[2] (如果不熟悉html的朋友们,需要自行百度html。)

  该xpath 表示 : 在 html标签下 -> body标签下 -> 第一个div标签下 -> 第二个div标签

  很好理解,继续

 例子 2:.//*[@id=‘content‘]/div[2]/ul

   这样会有人不理解了 .//*[@id=‘content‘] 到底是什么意思呢?

    . 代表当前路径

    a//b 表示:在a标签下的子孙辈b标签

    * 可以是任何标签

    [@id=‘content‘] 表示是 id 为 content

  所以:这个例子的意思是: id 为 content 的任何子标签下面 -> 第二个 div标签下 -> ul 标签

  

Xpath基础学习完毕,接下来开始进阶学习

  //p[text()=‘a‘]  :文本为 a 的p标签

  //p[text()=‘a‘]  : 文本包含 a 的p标签

  //a[@class=‘abc‘]   :class 为 a的 p标签 (当然咯。既然可以为 @class 就一定能用 @id ,为什么不联想下 @src 和@href呢?)

  //p[not(@class=‘a‘)]   :class 不为 a的 p标签

好了,进阶完毕,如果要使用更高阶的Xpath要先属性以上内容,然后联合 Selenium使用

Xpath和其他定位方式的比较:(主要是和CSS定位的对比)

  Xpath的最大好处是能向上查找,不过缺点是速度过慢。

css定位介绍

CSS定位速度快,功能多,但是不能向上查找,比xpath好用,执行效率比xpath来的快,曾经做过两种定位比较的测速,是本人认为最好用的定位方式。

大致用法总结:

1、*:checked  选中*的checked元素

2、 li.refined.list.group.item (如果class中间有空格,可以.+.+.全写也可以只写任意一个)
    .checkbox[type^=‘check‘][onclick*=‘Bebe‘][checked$=‘ed‘] +a
    (开头^=   包含*=   结尾$= )+a 是选中同级的后面的a

3、 li a        :选中 li 标签的后代 a

5、 li>a       :选中 li 标签的子元素 a

4、 li,a        :选中 li 和 a

5、 li +a      :选中 li 同级的 下一个 a

6、 li ~a       :选中 li 同级的 下面所有的 a

7、 li>a:last-child  /  li>a:last-of-type  : 选中 li 下最后面一个 a

8、 li:not([class*=‘_‘])    : li 中的 calss 不含 ‘_‘

li:not(:nth-of-type(1))    : 不含第一个 li 的所有 li

9、 li>a:nth-child(n)   /  li>a:nth-of-type(n) :选中 li 下第 n 个 a

li>a:nth-last-child(n)   /  li>a:nth-last-of-type(n):选中 li 下,倒数第 n 个 a

如果 n = odd 表示奇数

如果 n = even 表示偶数
    div h2:nth-child(n) : 当div的第n个子元素是h2的时候

div h2:nth-of-type(n):   div下第n个h2子元素

10、 div[style]     : div中包含 属性style

11、 li>a:only-child      :li 下只有1个a的 a 标签

原文地址:https://www.cnblogs.com/xuzhongtao/p/8528419.html

时间: 2024-10-27 06:05:19

selenium的定位方式的相关文章

selenium 2定位方式实例

#########百度输入框的定位方式########## #通过id方式定位 browser.find_element_by_id("kw").send_keys("selenium") #通过name方式定位 browser.find_element_by_name("wd").send_keys("selenium") #通过tag name方式定位 browser.find_element_by_tag_name(&q

selenium+python定位方式

今天记录的是selenium+python的定位方式简介,它的定位方式一般有几种类型:idnameclass link textxpathtagcss大部分常用的够了,还有几种如果用到再补充吧. 定位元素:可以通过by来声明定位的方法,传入对应定位方法是定位参数,例如: find_element_by_id("kw")其他定位方式都类似,只需要更换定位方式和参数即可. 原文地址:http://blog.51cto.com/10917781/2107600

selenium.元素定位方式

定位元素的方式主要有以下八种: 通过id定位元素:find_element_by_id("id_vaule") 通过name定位元素:find_element_by_name("name_vaule") 通过tag_name定位元素:find_element_by_tag_name("tag_name_vaule") 通过class_name定位元素:find_element_by_class_name("class_name"

selenium css定位方式

原文地址:https://www.cnblogs.com/woniu123/p/8358182.html

Selenium元素定位学习教程

无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元素的过程.这一篇我们就一起学习Selenium以及它是如何定位DOM元素的.本文将会介绍如下内容: Selenium DOM 主要的定位方式. Selenium 如何扩展元素定位方式. 辅助浏览器工具 (一)Selenium DOM主要定位方式 上一篇中,我们介绍了WebDriver和 WebEle

selenium 定位方式

在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下. 1. By.name() 假设我们要测试的页面源码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><

selenium+python之元素定位方式介绍

网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法. 1.导入selenium包的webdriver方法 输入 from selenium import webdriver 2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠 输入 from time import sleep

selenium定位方式

一.概念 做UI自动化的重点就是定位元素以及操作元素,关于定位selenium提供了两类十六种方式,即element.elements. 这两类方式的区别是对于元素的定位概念不同,定位方式是相同的. element返回的是一个元素对象可以直接进行元素操作,前提是对应元素存在可操作的预置条件: elements返回的是一组对象,在python中对应的数据类型即是列表,必须单独拿到目标对象才可以进行操作. 二.定位方式 selenium框架为我们提供了八类方式, 1.class_name,id,na

selenium对元素的八种定位方式

selenium提供了八种元素的定位方式: id id定位 name name属性定位 class_name 伪类名定位 tag_name 标签名定位 link_text 链接文本定位 partical_link_text 部分链接文本定位 xpath xpath路劲表达式定位 css_selector css选择器定位 八种定位方式的示例: from selenium import webdriverdriver=webdriver.Firefox() url="xxxx"drive