【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

这篇具有很好参考价值的文章主要介绍了【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

selenium元素定位

​selenium定位元素的方式有8种。

fild_element(by,value):by表示使用的定位方式,定位方式可以参见By类。value表示值,例如:根据id定位

By.ID,value=id属性的值。该方法返回元素对象,返回值如下:

<selenium.webdriver.remote.webelement.WebElement (session="b9c957076ccceb820ad3b873f1292d35", element="f5a68c75-fa74-4613-809a-cda1b3198d94")>

这个返回结果说明:返回值为WebElement类的对象,元素在使用方法时,应该调用的就是WebElement类的方法

By类提供的定位方法

  1. By.ID:根据标签的id属性的值定位元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.baidu.com")
    
    driver.find_element(By.ID,'kw').send_keys('hello python')
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  2. By.NAME :根据标签的name属性值定位元素

    from selenium import webdriver
    driver = webdriver.Firefox()
    driver.get('https://www.baidu.com')
    driver.find_element(By.NAME,'wd').send_keys('百度')
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  3. By.CLASS_NAME:根据class属性值定位元素,需要注意,尽量不要用class定位,因为一个页面中,往往会出现多个元素的class属性值相同,所以在定位的时候,如果有多个属性值相同的元素,自动会定位第一个元素。

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    
    
    driver = webdriver.Chrome()
    
    driver.get("https://www.baidu.com")
    
    
    driver.find_element(By.CLASS_NAME,'s_ipt').send_keys('hello python')
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  4. By.LINK_TEXT:根据超链接文本内容定位元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.find_element(By.LINK_TEXT,'新闻').click()
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  5. By.PARTIAL_LINK_TEXT:根据部分连接文本内容定位元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.find_element(By.PARTIAL_LINK_TEXT,'hao').click()
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  6. By.TAG_NAME:根据标签名定位元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.find_element(By.TAG_NAME,'area').click()
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  7. By.CSS_SELECTOR:根据css选择器定位元素,如果你要定位的元素,没有id、没有name、没有class,tagname也不唯一、又不是超链接。此时如何定位

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.find_element(By.CSS_SELECTOR,'#su').click()
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

  8. By.XPATH:根据xpath路径定位元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    driver = webdriver.Chrome()
    driver.get('https://www.baidu.com')
    driver.find_element(By.XPATH,'//*[@id="kw"]').click()
    

    【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

    注:xpath有两种表示方式:

    ​ 1、绝对路径:

    ​ 从html标签开始,顺序向下,逐层向下,直到目标元素,形成的最后的路径就是xpath路径,如果元素有多个相同的同级标签(兄弟标签),则可以在标签后加[数字],数字表示为第几个标签,数字从1开始。

    ​ 示例:从下面的html代码中,定位name属性为输入的输入框,xpath路径表示为:

    ​ /html/body/div/table/tr/td[1]/input

    <!DOCTYPE html>
    <html>
    <head>
    	<title>hello</title>
    </head>
    <body>
    	<div>
    		<table>
    			<tr>
    				<td>
    					<input type="text" name="输入">
    				</td>
    				<td>
    					<button>登录</button>
    				</td>
    			</tr>
    		</table>
    
    	</div>
    </body>
    </html>
    

    ​ 2、相对路径:

    ​ 从目标元素定位时,无法确认唯一标识,从该元素开始向上,直到找到一个能唯一定位的父级标签,再从该父级标签向下定位。不从html开始。

    ​ 示例:在这个案例中,想要定位第一个input标签,通过xpath相对路径定位方式:

    ​首先:在目标input上如果无法唯一定位,可以向上查找他的父级标签是否可以唯一定位,如果不行,可以继续向上查找,直到找了id为in1的这个div标签,开始从该标签向下定位,先定位到这个div标签"//div[@id='in1']",再向下定位,如果不能确定id为in1的标签是div,可以用*代替。这个路径可以表示为:

    ​ 1、 //div[@id='in1']/table/tr/td[1]/input

    ​ 2、 //*[@id='in1']/table/tr/td[1]/input

    语法:

    ​ //标签名[@属性=“属性值”]

    <!DOCTYPE html>
    <html>
    <head>
    	<title>hello</title>
    </head>
    <body>
    	<div></div>
    	<div></div>
    	<div id="in1">
    		<table>
    			<tr>
    				<td>
    					<input type="text" name="">
    				</td>
    				<td>
    					<input type="submit" name="">
    				</td>
    			</tr>
    		</table>
    
    </div>
    </body>
    </html>
    

定位方法:

​ 在firefox浏览器中,将鼠标放到目标元素上,右键选择“查看元素”(Chrome浏览器叫检查),会在开发者模式中显示你要定位目标元素。

​ 在目标元素上,可以查看目标元素有哪些属性,如果有id或name属性,可以使用by_id或by_name定位元素。

如果上述方式不能帮助你定位元素,可以采用css选择器方式定位,在目标元素上,右键——>复制——>css选择器

在常用元素定位方式中,最常用的css和xpath两种,因为这两中定位方式基本可以定位所有的页面元素,也可以使用这两种方式实现父子元素定位或兄弟元素定位。

css和xpath区别css比xpath要快一些xpath要遍历整个html文件

组元素定位

使用方法:

find_elements方法,与find_element方法一样。

区别是该方法以列表形式返回一组元素。如果需要其中一个元素,可以使用列表的下表方式获取,或则是使用for循环遍历所有的元素。

示例:

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome()


driver.get("https://www.baidu.com")



all_a = driver.find_elements(By.TAG_NAME,'a')
# 获取列表的长度,那么就能知道a标签的元素有多少个
print(len(all_a))

selenium执行JS代码

在selenium中,可以直接将js代码执行。方法为execute_script,接收要执行的js代码,如果需要获取js代码的执行结果,js代码中,需要使用return返回

execute_script(js代码)

示例:

from selenium import webdriver
from selenium.webdriver.common.by import By

drver = webdriver.Chrome()
drver.get('https://www.baidu.com')

# return表示将元素定位后,返回元素信息
js = 'return document.getElementById("kw")'
ele = drver.execute_script(js)
print(ele)

使用js代码操作滚动条

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()

driver.get('https://python.org')

js = 'scrollBy(0,1000)'
driver.execute_script(js)

修改元素的属性

1、在很多窗口中,在点击元素时,会跳转到一个新的窗口,在selenium中,往往需要切换窗口才能继续操作,那么可以使用js代码将它改成在当前窗口打开。

#coding=utf-8
__author__ = 'jia'
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()

driver.get('https://www.baidu.com')


# 找到新闻这个超链接,删除它的target属性
js = 'document.querySelector("#s-top-left > a:nth-child(1)").removeAttribute("target")'

driver.execute_script(js)
driver.find_element(By.CSS_SELECTOR,'#s-top-left > a:nth-child(1)').click()

2、在处理一些特殊的操作时,例如时间控件中,无法输入时间,只能操作时间控件来选择时间,这个操作相对比较麻烦,那么我们可以使用js将时间输入框改变成可输入,那么就可以直接输入时间即可,不用操作时间控件。

#coding=utf-8
__author__ = 'jia'
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.maximize_window()

driver.get('https://www.baidu.com')


# 找到新闻这个超链接,删除它的readonlin属性
js = 'document.querySelector("#s-top-left > a:nth-child(1)").removeAttribute("readonlin")'

driver.execute_script(js)

selenium的元素操作

​ send_keys(内容):向元素中输入内容

​ click():点击元素

​ text:获取元素中的文本内容,返回文本内容

​ title:获取当前窗口的title,返回title

​ is_displayed(): 如果元素可见,返回True,不可见返回False,不存在则产生NoSuchElementException,一个元素在网页中的状态有存在并可见、存在但不可见、不存在

​ current_url:返回当前窗口的URL地址

window_handles:获取所有窗口的句柄,获取所有已经打开的窗口

current_window_handle:获取当前窗口的句柄。

clear():清空文本框中的内容

等待:

​ 在做自动化测试时,难免会碰到一些问题,比如你在脚本中操作某个对象时,页面还没有加载出来,你的操作语句已经被执行,从而导致脚本执行失败,针对这样的问题webdriver提供了等待操作,等待一定的时间,或在一个时间段内发现对象,则继续操作。Webdriver提供了隐式等待和显示等待,当然,我们也可以借助包的模块,实现强制等待。

​ 为了解决这些问题,我们可以在脚本中适当加入等待时间,以确保目标元素能够被定位到。

sleep等待

​ sleep是等待多少秒后,再继续执行后面的代码,要想使用sleep,必须先导入time模块。

示例:在百度页面中,输入test,点击百度一下,必须要等待一段时间,才能点击元素

from selenium import webdriver
from time import sleep
driver = webdriver.Firefox()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('test')
driver.find_element_by_id('su').click()
#等待2秒,再点击后面的操作
sleep(2)
driver.find_element_by_css_selector('#\31  > h3:nth-child(1) > a:nth-child(1)').click()

注:sleep是强制等待,必须等到达到等待时间,才会继续执行下一步操作。时间如果设置的太长,会导致用例执行时间长,脚本执行效率底,等待时间短,依然可能发生元素没有加载成功。

智能等待:

​ 隐式等待:implicitly_wait

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('test')
driver.find_element_by_id('su').click()
#智能等待30秒
driver.implicitly_wait(30)
driver.find_element_by_css_selector('#\31  > h3:nth-child(1) > a:nth-child(1)').click()

隐式等待30秒,是总的等待时间,在这30内,如果任意一个时间上页面加载完成,那么等待将不再继续等待,直接执行后面的操作。implicitly_wait每0.5秒判断页面是否加载成功。如果30秒任然没有加载完成,则产生超时。

隐式等待适合在页面加载时使用,整个页面的加载。

显示等待:

WebDriverWait

显式等待:WebDriverWait()

​ 在界面操作时,如果使用等待,需要明确知道等待多长时间,如果时间太短,则容易产生超时,未能找到操作元素,如果时间太长,则容易浪费时间。如果使用sleep,则是全局等待。可以配合的实现针对某个元素的等待操作。

示例:

#coding=utf-8
__author__ = 'jia'

'''
显示等待:
    等待指定的元素在页面中显示出来,与隐式等待不同,隐式等待不指定等待的主体,而是将整个页面作为等待
    对象
    显示等待可以设置等待指定的页面元素


'''
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait


driver = webdriver.Chrome()
driver.get("https://www.sina.com.cn")
# 等待页面中,“军事”这个元素
# 1、示例化WebDriverWait对象
wait = WebDriverWait(driver,20)

# 编写一个定位元素的函数
# def fun(driver):
#     print('等待元素')
#     return driver.find_element(By.LINK_TEXT,'军事')
# 调用等待方法
wait.until(lambda x:x.find_element(By.LINK_TEXT,'军事'))




driver.find_element(By.LINK_TEXT,'军事').click()

2、使用ec模块来实现等待

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec



driver = webdriver.Chrome()
driver.get("https://www.sina.com.cn")

WebDriverWait(driver,20).until(ec.visibility_of_element_located((By.LINK_TEXT,'军事')))

driver.find_element(By.LINK_TEXT,'军事').click()

WebDriverWait(driver,20).until(ec.visibility_of_element_located((By.LINK_TEXT,'军事')))

这段代码需要解释,WebDriverWait(driver,20).until(ec.visibility_of_element_located((By.LINK_TEXT,'军事')))。通过文本,检查页面是否有军事这个元素,并且可见,并且该元素的高和宽不为0。总结该句代码的意思为,判断页面是否有军事这个元素,并可见,如果没有完成,则默认每隔0.5秒检查一次,直到20秒后超时,如果在20秒内完成,则继续执行之后的代码。如果20秒内容元素没有找到,则超时。

expected_conditions

presence_of_all_elements_located()类:期望检查是否存在至少一个元素在网页上。返回WebElements列表
visibility_of_any_elements_located()类:期望检查至少有一个元素是可见的在网页上。返回WebElements列表
visibility_of_all_elements_located()类:期望检查所有元素是否存在于a的DOM上页面和可见。用于查找元素一旦找到并可见,就会返回WebElements列表
text_to_be_present_in_element()类:期望检查给定文本是否存在于指定的元素。
text_to_be_present_in_element_value()类:期望检查元素中是否存在给定文本定位器,文本
invisibility_of_element_located()类:用于检查元素是否不可见的期望出现在DOM上。
invisibility_of_element()类:检查元素是否不可见的期望出现在DOM上。
element_to_be_clickable()类:检查元素的期望是可见的并且已启用你可以点击它
staleness_of()类:等到元素不再附加到DOM。element是要等待的元素。如果元素仍附加到DOM,则返回False,否则返回true。
element_to_be_selected()类:选择检查选择的期望。element是WebElement对象
element_located_to_be_selected()类:选择对元素的期望。locator是(by,path)的元组
alert_is_present()类:检查是否出现alter面板

 如果文章对你有帮助,记得点赞,收藏,加关注。会不定期分享一些干货哦......

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法

这些资料,对于想做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助……加入我的学习交流群一起学习交流讨论把!!!!  

【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法文章来源地址https://www.toymoban.com/news/detail-498273.html

到了这里,关于【selenium自动化测试】如何定位页面元素,及对页面元素的操作方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web自动化测试理论之selenium八大定位 -(2)

    概念:通过元素的id属性来定位元素。 前置:所要定位的元素必须有id属性 方法:driver.find_element_by_id(id属性值) 概念:通过元素的name属性来定位元素。 前置:所要定位的元素必须有name属性。 方法:driver.find_element_by_name(name属性值) 特点:当前页面可以重复 由于name属性值可以

    2024年02月09日
    浏览(13)
  • java+selenium自动化测试之8大常用定位方法

    定位元素:Selenium能够模拟用户去浏览器页面上执行对应(输入,点击,清除,提交)等操作,它是凭什么方式去寻找到页面的元素?Selenium没有视觉、听觉等。Selenium通过在页面上寻找元素位置,找到元素后,然后对元素进行相应的操作,Selenium寻找元素位置的方法,称之为

    2024年04月27日
    浏览(3)
  • 【深入浅出Selenium库的百变玩法】: 掌握Web自动化测试的关键技术和策略,包括元素定位、页面操作、动态内容处理等,适用于初学者和高级开发者的综合指南

    Selenium是一个功能强大的库,支持多种高级操作,如处理多窗口、多标签页、键盘与鼠标事件、滚动操作等。掌握Selenium可以大大提高Web应用的测试效率和覆盖范围。希望这篇文章能帮助你开启Selenium进行自动化测试的新篇章。 Selenium也是一个广泛使用的自动化测试工具,它支

    2024年02月20日
    浏览(14)
  • python自动化测试selenium定位frame及iframe示例

    这篇文章主要为大家介绍了python自动化测试selenium定位frame及iframe示例的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助 frame标签有frameset、frame、iframe三种,frameset和其它普通标签没有区别,不会影响正常定位,而frame与iframe对selenium定位而言是一样的。 Selenium有

    2024年01月20日
    浏览(13)
  • Selenium元素定位全攻略,让你轻松玩转自动化测试!

    一、什么是元素定位 元素定位就是查找HTML元素的过程,操作页面元素之前,首先要对元素进行定位,所以定位是自动化脚本编写的开始。 通常使用find_element或find_elements方法来定位元素(find_element 使用给定的方法定位和查找一个元素;find_elements 使用给定的方法定位和查找所

    2024年02月04日
    浏览(14)
  • 自动化测试学习(六)-selenium定位元素之CSS选择器详细用法

    目录 1.通过class属性定位 2.通过id属性定位 3.通过标签名定位 4.其他方法定位    CSS是一种语言,它可以比较灵活的选择控件的任意属性,一般情况下比Xpath快,下面我们详细介绍CSS的用法。CSS常见语法如下表所示:  选择器 示例 描述 .class .s_ipt 选择class=\\\"s_ipt\\\"的所有元素 #i

    2024年01月17日
    浏览(18)
  • robotframework+selenium 进行webui页面自动化测试

    robotframework其实就是一个自动化的框架,想要进行什么样的自动化测试,就需要在这框架上添加相应的库文件,而用于webui页面自动化测试的就是selenium库.  关于robotframework框架的搭建我这里就不说了,今天就给大家根据一个登录的实例来讲一讲,selenium库的相关应用吧。 要想

    2024年02月12日
    浏览(11)
  • python+selenium的web自动化测试之8种元素定位方式详解

    目录 前言 单一属性定位 通过元素的id 通过元素的name 通过元素的class 通过元素的标签名 通过元素的超链接文本 通过元素的部分超链接文本 XPTH定位 CSS定位 辅助定位工具 ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确

    2023年04月16日
    浏览(11)
  • 自动化测试之八大元素定位方式(python3.10+selenium4)

    元素的定位是自动化测试核心。要操作一个对象,首先要识别定位或找到这个对象。为了实现网页整体布局,我们先要知道,一个元素,是如何定位到页面上的某个位置的,这就是元素定位。 系统环境 Windows 11 📌 python3.10.5 🔖 selenium 4.8.0 🚩 注意:以下每种定位方式均有一

    2024年02月03日
    浏览(14)
  • 用Robotframework+selenium 进行webui页面自动化测试

    Robotframework其实就是一个自动化的框架,想要进行什么样的自动化测试,就需要在这框架上添加相应的库文件,而用于webui页面自动化测试的就是selenium库. ​ 关于robotframework框架的搭建我这里就不说了,今天就给大家根据一个登录的实例来讲一讲,selenium库的相关应用吧。 要

    2024年04月16日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包