百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

selenium系列教程|2.python自动化脚本解析及8大元素定位

myzbx 2025-02-20 17:01 55 浏览

python 穿上 seleniumwebdriver 是多么的性感

#coding = utf-8 from selenium import webdriver

browser = webdriver.Firefox()

browser.get("http://www.baidu.com")

browser.find_element_by_id("kw").send_keys("selenium") browser.find_element_by_id("su").click()

browser.quit()

脚本解析

# coding = utf-8

可加可不加,开发人员喜欢加一下,防止乱码嘛。

from selenium import webdriver

要想使用 selenium 的 webdriver 里的函数,首先把包导进来嘛

browser = webdriver.Firefox()

我们需要操控哪个浏览器呢?Firefox ,当然也可以换成 Ie 或 Chrome

browser 可以随便取,但后面要用它操纵各种函数执行。

browser.find_element_by_id("kw").send_keys("selenium")

一个控件有若干属性 id 、name、(也可以用其它方式定位),百度输入框的 id 叫 kw , 我要在输入框里输入 selenium 。多自然语言呀!

browser.find_element_by_id("su").click()

搜索的按钮的 id 叫 su ,我需要点一下按钮( click() ) 。

browser.quit()

退出并关闭窗口的每一个相关的驱动程序,有洁癖用这个。

browser.close()

关闭当前窗口 ,用哪个看你的需求了。

元素的定位

对象的定位应该是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。 一个对象就是一个人一样,他会有各种的特征(属性),如比我们可以通过一个人的身 份证号,姓名,或者他住在哪个街道、楼层、门牌找到这个人。

那么一个对象也有类似的属性,我们可以通过这个属性找到这对象。

webdriver 提供了一系列的对象定位方法,常用的有以下几种:

·id·name·classname.linktext·partiallinktext·tagname·xpath·css selector

我们可以看到,一个百度的输入框,可以用这么用种方式去定位。

maxlength="100" name="wd"

autocomplete="off">

#coding=utf-8 from selenium import webdriver

browser =webdriver.Firefox()

browser.get("http://www.baidu.com")

#百度输入框的定位方式#

#通过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("input").send_keys("selenium")

#通过class name 方式定位

browser.find_element_by_class_name("s_ipt").send_keys("selenium")

#通过CSS方式定位

browser.find_element_by_css_selector("#kw").send_keys("selenium")

#通过xphan方式定位

browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

#browser.find_element_by_id("su").click() time.sleep(3) browser.quit()

id 和 name 定位

id 和 name 是我们最最常用的定位方式,因为大多数控件都有这两个属性,而且 在对控件的 id 和 name 命名时一般使其有意义也会取不同的名字。通过这两个属性使我 们找一个页面上的属性变得相当容易

我们通过前端工具,找到了百度输入框的属性信息,如下:

maxlength="100" name="wd"

autocomplete="off">

id=”kw”

通过 find_element_by_id("kw") 函数就是捕获到百度输入框

name=”wd”

通过 find_element_by_name("wd")函数同样也可以捕获百度输入框

tagname 和 classname 定位

从上面的百度输入框的属性信息中,我们看到,不单单只有 id 和 name 两个属性, 比如 class 和 tagname(标签名)

就是一个标签的名字,可以通过

find_element_by_tag_name("input")函数来定位。

class="s_ipt"

通过
find_element_by_class_name("s_ipt")

函数捕获百度输入框。

CSS 定位

CSS(Cascading Style Sheets)是一种语言,它被用来描述 HTML 和 XML 文档的表现。 CSS 使用选择器来为页面元素绑定属性。这些选择器可以被 selenium 用作另外的定位策 略。

CSS 的比较灵活可以选择控件的任意属性,上面的例子中:

find_element_by_css_selector("#kw")

通过
find_element_by_css_selector( )函数,选择取百度输入框的 id 属性来定义

也可以取 name 属性

新 闻

driver.find_element_by_css_selector("a[name=\"tj_news\"]").click()

可以取 title 属性

href="http://www.baidu.com/">网页

driver.find_element_by_css_selector("a[title=\"web\"]").click()

也可以是取

driver.find_element_by_css_selector("a.RecycleBin").click()

虽然我也没全部理解 CSS 的定位,但是看上去应该是一种非常灵活和牛 X 的定位方式

XPath 定位

什么是 XPath:

selenium 中被误解的 XPath :

XPath 是一种在 XML 文档中定位元素的语言。因为 HTML 可以看做 XML 的一种实现, 所以 selenium 用户可是使用这种强大语言在 web 应用中定位元素。

XPath 扩展了上面 id 和 name 定位方式,提供了很多种可能性,比如定位页面上的 第三个多选框。

xpath:attributer (属性)

driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium") #input

标签下id =kw的元素

xpath:idRelative(id相关性)

driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium")

#在/form/span/input 层级标签下有个div标签的id=fm的元素


driver.find_element_by_xpath("//tr[@id='check']/td[2]").click() # id为'check' 的tr ,

定位它里面的第2个td

xpath:position (位置)

driver.find_element_by_xpath("//input").send_keys("selenium")driver.find_element_by_xpath("//tr[7]/td[2]").click()

#第7个tr 里面的第2个td

xpath: href (水平参考)


driver.find_element_by_xpath("//a[contains(text(),'网页')]").click() #在a标签下有个文本(text)包含(contains)'网页' 的元素

xpath:linkdriver.find_element_by_xpath

("//a[@href='http://www.baidu.com/']").click()

#有个叫a的标签,他有个链接

href='http://www.baidu.com/的元素

link 定位

有时候不是一个输入框也不是一个按钮,而是一个文字链接,

我们可以通过 link #coding=utf-8

from selenium import webdriver browser = webdriver.Firefox()

browser.get("http://www.baidu.com")
browser.find_element_by_link_text("贴 吧").click() browser.quit()

一般一个页面上不会出现相同的文件链接,通过文字链接来定位也是一种简单有效 的定位方式。

Partiallinktext 定位

通过部分链接定位,这个有时候也会用到,我还没有想到很好的用处。拿上面的例 子,我可以只用链接的一部分文字进行匹配:


browser.find_element_by_partial_link_text("贴").click() #通过


find_element_by_partial_link_text() 函数,我只用了“贴”字,脚本一样找到了"贴 吧 " 的链接。


本系列教程未selenium+Python方向的入门级教程,欢迎大家评论反馈。

西边人细说测试,

头条号(软件测试资源站)作者,程序爬虫获取国内外测试资源分享给自学爱好者。

今日头条关注后,私信回复如下关键词获取大量打包资料下载。

测试资料、工具、Python、自动化测试报告、梯子 等

相关推荐

vue 基础-组件中事件的触发和监听

前言《vue基础》系列是再次回炉vue记的笔记,除了官网那部分知识点外,还会加入自己的一些理解。(里面会有部分和官网相同的文案,有经验的同学择感兴趣的阅读)vue中单纯的事件调用,你一定不陌生...

JMH基准测试和JMH-Visual-chart可视化

原文地址:https://github.com/Sayi/sayi.github.com/issues/68如何度量一段代码的性能,换种实现方式会有更佳的性能表现吗?你或许想知道fastjson是否正...

一文轻松看懂丰田汽车的电路图(丰田车电路图识读技巧)

丰田汽车电路图符号、含义丰田汽车电路图识读说明电路图中字母是注释标号,其各部分的含义如下:注释标号A:表示系统标题,在电路图上方用横线划分,区域内用文字和系统符号表示下方电路系统的名称。注释标号B:表...

杭州高级中学发文言文版校庆公告引热议——全文932字,74处注释

阅读提示校方回应:我们期待以这种‘复古’的方式引起公众注意,也算是为树立起大众的文化自信、唤起大众对传统文化的关注作出一点贡献。5月14日,杭州高级中学官方微信发布了一篇文言文版的校庆公告。几个小...

Python 和 JS 有什么相似?(python和js哪个快)

Python是一门运用很广泛的语言,自动化脚本、爬虫,甚至在深度学习领域也都有Python的身影。作为一名前端开发者,也了解ES6中的很多特性借鉴自Python(比如默认参数、解构赋值、...

阿里卖家 Flutter for Web 工程实践

作者:马坤乐(坤吾)Flutter自2015年初次亮相以来,经过了多年的发展已经相当成熟,在阿里、美团、拼多多等互联网公司都有广泛的应用。在ICBU阿里卖家上90+%的新业务使用Flu...

诗经275思文押韵、注释、古音、今韵

诗经275-1思文押韵(备注:□=非韵、■=i韵、●=o/u韵、◆=ng韵、=i/o二象性)「」1.思文后稷,克配彼天。立我烝民,莫菲尔极。贻我来牟,帝命率育。无此疆尔界,陈常于时夏。□□□■,...

SolidWorks中常用命令快捷键(solidworks有哪些快捷键)

1.A:中心线2.B:镜向3.C:画圆4.D:智能标柱尺寸5.E:删除6.F:草图倒圆角7.G:画直线8.H:从装配制作工程9.I:等距实体10.J:从装配制作装配11.K:多边形12.L:延伸13....

第一章、TS语言简介(tsl语言)

TypeScript(简称TS)是微软公司开发的一种基于JavaScript(简称JS)语言的编程语言。它的目的并不是创造一种全新语言,而是增强JavaScript的功能,使其更适合多人合...

为什么要用JMH?何时应该用?(日本jmh地面分析图网站)

if快还是switch快?HashMap的初始化size要不要指定,指定之后性能可以提高多少?各种序列化方法哪个耗时更短?无论出自何种原因需要进行性能评估,量化指标总是必要的。在大部分场合...

雅虎“YSlow - 23 条规则”详尽阐释

以下乃是雅虎“YSlow-23条规则”的详尽阐释,旨在优化网页之性能以及用户之体验,乃是结合技术之原理与实践之方法梳理而成:1.减少HTTP请求次数说明:每一次HTTP请求皆会增添延迟...

JavaScript 运算符(js ~运算符)

JavaScript运算符JS变量JS算数JavaScript运算符实例向变量赋值,并把它们相加:varx=7;//向x赋值5vary=8;//向y赋值2...

在Notebook中使用Sublime Text 快捷键

编程派微信号:codingpy前几天,我在公众号上发布了两篇译文,对JupyterNotebook做了一些基础性的介绍。虽然说比较基础,而且第二篇阅读量并不高,但是我认为对于其他对于Noteb...

晨光静好时!2 道 JS 与 TS 面试题解析,开启惬意学习日

当第一缕晨光温柔地唤醒窗台的绿植,泡上一杯清香四溢的茉莉花茶,坐在洒满阳光的角落。此刻,放下对面试的焦虑,让我们像聊生活趣事般,轻松拆解两道JavaScript和TypeScript的高频面试...

2024年CSPJ题目解析,语法基本功>算法!

前言:每次有家长来找我们咨询报课,说孩子学了一年了,竞赛成绩不理想,问怎么才能强化,提升,我们经过一番询问,发现这类孩子普遍都是在算法上已经花了非常多的时间了,但是语法根本不过关。对这种孩子我们普遍建...