首页 > 其他分享 >Selenium实现元素定位

Selenium实现元素定位

时间:2024-08-25 16:53:02浏览次数:12  
标签:定位 Selenium self 元素 driver element test find

Selenium提供了定位元素的方法find_element(),该方法被定义在WebDriver类中。


一、参数
1、两个参数,参数1根据不同定位方法确定,定位方法如下:

(1)通过id定位:使用参数By.ID定位元素的ID属性;
(2)通过元素名定位:使用参数By.NAME定位元素的NAME属性;
(3)通过标签名定位:使用参数BY.TAG_NAME定位元素的TAG_NAME属性;一般不使用该参数,使用该参数后方法会返回list,不能准确定位所找元素
(4)通过xpath定位:使用参数By.XPATH通过xpath表达式定位元素;
(5)通过css class定位:使用参数By.CLASS_NAME定位元素的class属性;
(6)通过css选择器定位:使用参数By.CSS_SELECTOR通过CSS选择器定位元素;
(7)通过链接文本定位:使用参数By.LINK_TEXT定位元素
(8)通过部分链接文本定位:使用参数By.PARTIAL_LINK_TEXT定位元素

2、参数2为上述对应属性的值

如何确定参数2:打开网页,选择任意元素,比如输入框,按钮,右键单击检查,就会有对应属性出现。以百度为例:


image


image


By.ID="kw"
By.NAME="wd"
By.TAG_NAME="input"
By.CLASS_NAME="s_ipt"
By.XPATH和By.CSS_SELECTOR可右键单击该元素,直接复制
By.LINK_TEXT和By.PARTIAL_LINK_TEXT为页面上任意链接文本,比如百度页面上的"新闻","首页"等,均可作为其值,两者区别在于,前者为链接的全部文本,后者为链接的部分文本


image


二、返回值

返回一个WebElement对象,这个对象代表页面上的一个元素


三、简单的代码示例

以下是一个简单的示例代码,展示如何使用find_element()方法通过各个属性定位元素

点击查看代码
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

#将各个元素定位方法封装成一个类
class TestCase:
    #初始化方法
    def __init__(self):
        #驱动程序打开浏览器
        self.driver=webdriver.Edge()
        #跳转对应网页
        self.driver.get("http://www.baidu.com")
        #网页最大化
        self.driver.maximize_window()

    #通过id定位元素
    def test_id(self):
        #网页中定位到输入框,输入关键词python
        self.driver.find_element(By.ID,"kw").send_keys("python")
        #定位到按钮并点击搜索
        self.driver.find_element(By.ID,"su").click()
        sleep(2)
        quit()

    #通过name定位元素
    def test_name(self):
        self.driver.find_element(By.NAME,"wd").send_keys("selenium")
        self.driver.find_element(By.ID,"su").click()
        sleep(2)
        quit()

    #通过xpath定位元素
    def test_xpath(self):
        self.driver.find_element(By.XPATH,"//*[@id='kw']").send_keys("selenium")
        self.driver.find_element(By.XPATH,"//*[@id='su']").click()
        sleep(2)
        quit()

    #通过CSS_SELECTOR定位
    def test_css_selector(self):
        self.driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("selenium")
        self.driver.find_element(By.CSS_SELECTOR,"#su").click()
        sleep(2)
        quit()

    #通过CSS_NAME定位元素
    def test_class_name(self):
        self.driver.find_element(By.CLASS_NAME,"s_ipt").send_keys("selenium")
        self.driver.find_element(By.ID,"su").click()
        sleep(2)
        quit()

    #通过LINK_TEXT定位元素
    def test_link_text(self):
        #网页中找到"贴吧"文本的链接并点击
        self.driver.find_element(By.LINK_TEXT,"贴吧").click()
        sleep(2)
        quit()

    #通过PARTIAL_LINK_TEXT定位元素
    def test_partial_link_text(self):
        #网页中找到含有"AI"文本的链接并点击
        self.driver.find_element(By.PARTIAL_LINK_TEXT,"AI").click()
        sleep(2)
        quit()

if __name__ == "__main__":
    testcase = TestCase()
    #testcase.test_id()
    #testcase.test_name()
    #testcase.test_xpath()
    #testcase.test_css_selector()
    #testcase.test_class_name()
    #testcase.test_link_text()
    testcase.test_partial_link_text()

标签:定位,Selenium,self,元素,driver,element,test,find
From: https://www.cnblogs.com/jongjongjong/p/18378799

相关文章

  • 微信不能打开,点击微信后显示无法定位程序输入点CreateTOolhelp32Snapshot于动态链接库
    问题描述:解决方法:修复动态链接库KERNEL32.dll重新安装动态链接库KERNEL32.dll检查应用程序兼容性与更新,或查找应用程序的补丁以修复可能存在的与kernel32.dll相关的兼容性问题下载最新版微信,卸载微信,重启电脑,退出杀毒软件后,重新安装最新版。原因:    1、系统文件损......
  • 第一个selenium测试
    一、环境搭建使用语言:python1、python解释器:python.exe版本3.11.4下载地址:[https://www.python.org/downloads/release/python-3114/]设置环境变量:复制python.exe安装路径--高级系统设置--环境变量--PATH中添加--粘贴python.exe安装路径--确定目的是确保接下来系统能从设......
  • 2024-08-24:用go语言,给定一个下标从1开始,包含不同整数的数组 nums,数组长度为 n。 你需
    2024-08-24:用go语言,给定一个下标从1开始,包含不同整数的数组nums,数组长度为n。你需要按照以下规则进行n次操作,将数组nums中的所有元素分配到两个新数组arr1和arr2中:1.首先将nums中第一个元素加入arr1。2.然后将nums中第二个元素加入arr2。3.如果arr1的最后一......
  • 1075 链表元素分类——PAT乙级
    给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0,K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为18→7→-4→0→5→-6→10→11→-2,K为10,则输出应该为-4→-6→-2→7→0→5→10......
  • 【Python进阶】Python中的函数式编程元素:map、filter和reduce的妙用
    1、函数式编程概览1.1函数式编程起源与发展函数式编程这一概念可以追溯到20世纪30年代的λ演算理论,这一时期数学家们开始探讨如何通过纯粹的函数运算来构建计算模型。随着时间的推移,函数式编程逐渐发展成为一种重要的编程范式,并在Lisp、Scheme、Haskell等语言中得到了充......
  • 代码随想录算法训练营第 48 天 |LeetCode 739. 每日温度 LeetCode496.下一个更大元素
    代码随想录算法训练营Day48代码随想录算法训练营第48天|LeetCode739.每日温度LeetCode496.下一个更大元素ILeetCode503.下一个更大元素II目录代码随想录算法训练营前言LeetCode739.每日温度LeetCode496.下一个更大元素ILeetCode503.下一个更大元素II一......
  • 力扣: 移除链表元素
    文章目录需求虚拟头结点法原头结点法结尾需求给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val==val的节点,并返回新的头节点。示例1:输入:head=[1,2,6,3,4,5,6],val=6输出:[1,2,3,4,5]示例2:输入:head=[],val=1输......
  • 小红书全能实战营:精准定位,爆款打造,实现轻松涨粉变现之旅
    课程目录:1.[开营仪式]小红书训练营盛大开幕_.mp42.[直播精讲]第一篇章:精准定位与个性化包装,打造独特IP.mp43.[直播赋能]第二篇章:选题与标题的艺术,吸引眼球的秘诀.mp44.[互动答疑·上]专场,解答你的小红书成长疑惑_.mp45.[互动答疑·下]继续坐镇,深度剖析小红书运......
  • 存在重复元素 II(LeetCode)
    题目        给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i]==nums[j] 且 abs(i-j)<=k 。如果存在,返回 true ;否则,返回 false 。解题"""时间复杂度为O(n),空间复杂度为O(min(n,k)),其中n......
  • Selenium + Python 自动化测试22(PO+数据驱动)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了PO模式和unittest框架结合起来使用。        本篇文章我们综合一下之前学习的内容,如先将PO模式、数据驱动思想和我们生成HTML报告融合起来,综合的灵活的使用......