关于webdriver元素定位的问题

今天终于解决了遗留很久的一个元素定位问题,非常感谢博友的博文帮助。可以参考:https://www.cnblogs.com/qingchunjun/p/4208159.html

现在总结自己学习过程中了解到的元素定位方法,与大家分享,如有不全的地方请大家多多指教。

--id

--name

--class name

--link text

--partial link text

--tag name

--xpath

--css selector

例如我们打开百度首页,要获取百度搜索框的元素定位,源代码如下:

<input autocomplete="off" maxlength="255" value="" class="s_ipt" name="wd" id="kw">

1、by_id()

我们通过id 来获取定位,代码如下:

driver=webdriver.Firefox()
driver.get(‘https://www.baidu.com/‘)
driver.find_element_by_id(‘kw‘).send_keys(‘哈哈哈‘)

2、by_name()

我们通过name来定位,代码如下:

driver=webdriver.Firefox()
driver.get(‘https://www.baidu.com/‘)
driver.find_element_by_name(‘wd‘).send_keys(‘哈哈哈‘)

3、by_class_name()

我们通过class name来定位,代码如下:

driver.find_element_by_class_name(‘s_ipt‘).send_keys(‘哈哈哈‘)

4、by_link_text()

当我们要定位的元素是超文本文字时,例如:

<a href="login/NewLogin/Logout">退出登录</a>

我们可以这样定位:

driver.find_element_by_link_text(‘退出登录‘).click()

5、by_partial_link_text()

这是相对于上一种定位方式的模糊定位,只要填入的内容是页面上唯一的,就可以定位到该元素,如:

driver.find_element_by_partial_link_text(‘退出‘).click()

6、by_tag_name()

标签名定位,如在QQ登录页面定位登录框,源代码如下:

<input type="text" tabindex="1" value="" name="u" id="u" class="inputstyle">

定位代码如下:

#定位标签为input的元素
driver.find_element_by_tag_name(‘input‘).send_keys(‘[email protected]‘)
#获取页面所有标签为input的标签,定位到第一个元素
driver.find_elements_by_tag_name(‘input‘)[0].send_keys(‘[email protected]‘)

当使用driver.find_elements_by_tag_name(‘input‘)时,编译器自动将所有input标签看做是一个列表,读取某一个input时需要指定元素下标。

7、by_xpath()

使用xpath定位是一个非常强大的定位方式,几乎所有的元素都能使用这个方法定位到。如定位百度搜索框

driver.find_element_by_xpath(‘/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input‘).send_keys(‘哈哈哈’)

这是正常的使用xpath最原始的方法。(也是最初学习时掌握的方法)

a. 用contains关键字,定位代码如下:

1 driver.findElement(By.xpath(“//a[contains(@href, ‘logout’)]”));
这句话的意思是寻找页面中href属性值包含有logout这个单词的所有a元素,由于这个退出按钮的href属性里肯定会包含logout,所以这种方式是可行的,也会经常用到。其中@后面可以跟该元素任意的属性名。

b. 用start-with,定位代码如下:

1 driver.findElement(By.xpath(“//a[starts-with(@rel, ‘nofo’)]));
这句的意思是寻找rel属性以nofo开头的a元素。其中@后面的rel可以替换成元素的任意其他属性。

c. 用Text关键字,定位代码如下:

1 driver.findElement(By.xpath(“//*[text()=’退出’]));
这个方法可谓相当霸气啊。直接查找页面当中所有的退出二字,根本就不用知道它是个a元素了。这种方法也经常用于纯文字的查找。

另外,如果知道超链接元素的文本内容,也可以用

1 driver.findElement(By.xpath(“//a[contains(text(), ’退出’)]));
这种方式一般用于知道超链接上显示的部分或全部文本信息时,可以使用。

8、by_css_selector

使用css定位也是非常强大的,并且相对xpath来说,css定位执行速度更快,代码如下:

#使用id定位
driver.find_element_by_css_selector(‘#kw‘).send_keys(‘python‘)
# #使用class定位
driver.find_element_by_css_selector(‘.s_ipt‘).send_keys(‘python‘)
#使用属性定位
driver.find_element_by_css_selector(‘[autocomplete="off"]‘).send_keys(‘python‘)

以上是正常的使用css最原始的方法。(也是最初学习时掌握的方法)

这里提一下之前我遇到的元素定位的问题,就是在定位页面元素时,源代码如下:

<button type="submit" class="btn radius size-L btn-danger" style="width: 100%;background-color:#c62b26">登 录</button>

这个里面既没有id,也没有name,起初我尝试着用class_name来实行定位,但是返回定位不到元素,也尝试过用link_text,,试着用学到的css方法来定位,按照class_name的方式,但返回是失败的,因为这里的class赋值(class="btn radius size-L btn-danger),其中都多个字符串组合而成,即使用了空格分隔,因此不能简单的像之前那样使用class_name定位,代码如下:

driver.find_element_by_css_selector(‘button.btn.radius.size-L.btn-danger‘).click()

代码解读:先进入button标签下,再找到btu->radius->size-L.btn-danger。

最后,能使用id /name尽量使用,不能再考虑使用css或xpath。

与君共勉!

原文地址:https://www.cnblogs.com/Taxus215/p/9523465.html

时间: 2024-11-13 04:10:40

关于webdriver元素定位的问题的相关文章

Selenium Webdriver元素定位的方式

Selenium Webdriver元素定位的方式 主要就是By类的 1.By.name() ## html代码如下: <button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba"><span id="gbqfsa">Google Search</span></button>

Selenium Webdriver元素定位的八种常用方式

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

Selenium Webdriver元素定位的八种常用方式(转载)

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

selenium + python自动化测试unittest框架学习(三)webdriver元素定位(一)

1.Webdriver原理 webdirver是一款web自动化操作工具,为浏览器提供统一的webdriver接口,由client也就是我们的测试脚本提交请求,remote server浏览器进行响应请求,相对于原来selenium1中的selenium rc更加的简便,对浏览器的操作更加灵活. 2.定位 (1)元素的定位: 元素的定位可以通过id,name,class name,tag name,link_text,partial_link_text,css selector,xpath等 语

Robot Framework+WebDriver元素定位

Selenium支持的定位方式: 常用的定位方式有id,name,xpath等…… 上一篇中的登陆实例,定位使用xpath后的样式为 XPath定位 ——使用属性名称为元素:xpath=//input[@name='']; ——使用部分属性值定位元素: ——使用值来匹配任意属性及元素:xpath=//input[@*='username']; 注:后续会对XPath定位进行详细的补充~

Selenium webdriver 学习总结-元素定位

Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要高些,使用id,name属性定位元素是最可靠,效率最高的一种办法. 1.工具选择:在我们开发测试脚本的过程中各个浏览器给我们也提供了方便定位元素的工具,我比较喜欢使用firefox的firebug工具,也是目前很多开发测试人员比较热衷的选择,原因是firefox是唯一能够集成selenium IDE

【Selenium WebDriver】元素定位函数 FindElement

定位Web页面上的元素,用FindElement函数,它可以根据元素的不同属性来快速定位.具体的属性如下: 例子: HTML页面文件: 1 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-us"> 2 <head> 3 <body> 4 <form name="loginForm"> 5 <label for="username

java selenium webdriver实战 页面元素定位

自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选择下拉列表中的那个下拉列表或者输入框中输入什么值 其中定位页面元素是三步骤的第一步,本篇介绍常用的定位方法 webDriver对象的findElement函数用于定位一个页面元素,findElements函数用户定位多个页面元素,定位的页面元素使用webElement对象进行存储 常用的方法有: 1

Webdriver API(元素定位与操作)

Webdriver提供了8种元素定位方法:id.name.class name.tag name.link text.partial link text.xpath.css selector 一.以上8种元素定位,Webdriver提供两套写法 1. 用By定位元素:通过By来声明定位的方法,需引入By模块 find_element(By.ID,"kw") find_element(By.NAME,"wd") 2. 直接定位 find_element_by_id(&