大型情感剧集Selenium:3_元素定位

简介: 本来以为是我的selenium版本太低了,可以上官网看到3.141.0是最新版本啊,最后把python从3.6.8升级到3.7.3才复现了此问题。虽然这个告警不影响使用,但既然官方提示了修改就看看呗,其实很简单

关于昨天的文章


今天有朋友反馈,代码运行的时候,selenium提示警告

DeprecationWarning: use options instead of chrome_options

driver = webdriver.Chrome(chrome_options=options)


本来以为是我的selenium版本太低了,可以上官网看到3.141.0是最新版本啊,最后把python从3.6.8升级到3.7.3才复现了此问题。虽然这个告警不影响使用,但既然官方提示了修改就看看呗,其实很简单:


# 将原本的chrome_options
driver = webdriver.Chrome(chrome_options=options)
# 改为options 即可
driver = webdriver.Chrome(options=options)
# 另外,针对以下引用
from selenium.webdriver.chrome.options import Options
options = Options()
# 可以简写为:
options = webdriver.ChromeOptions()


今天说什么


今天肯定说元素定位啊,再不说都要取关了...可应该怎么说呢?

话说,selenium1.0起初它使用了基于Javascript的自动化引擎,而浏览器对 Javascript 又有很多安全限制,之后后通过webdrvier进行了各浏览器的协议封装。那么说到底,我们通过selenium变相的完成了js的的相关操作,比如:


网络异常,图片无法展示
|

selenium元素定位方法


再来看看js的dom对象:

image.png


js的dom对象

selenium将JavaScript的HTML DOM进行了封装处理,最终提供给我们进行使用。引申出三点:

  1. 开发转测试,真的是有优势的
  2. 作为一个合格的测试,抽时间学学html css 和js 也是对自己能力的提升
  3. 爬虫熟识的html解析库Beautifulsoup4,元素的定位上用法也类似以上两者,一通百通!


selenium元素定位


WebDriver提供了一系列的定位符以便使用元素定位方法。常见的定位符有以下几种:

  • id
  • class name
  • name
  • tag
  • link text
  • partial link text
  • xpath
  • css selector


而针对元素定位,selenium又分为find_element_byfind_elements_by。即找到一个元素和找到所有元素。


针对find_elements_by,我们又可以针对找到的元素,我们又可以像python操作list一样进行切片,筛选等操作。


我们以百度为例,介绍以上方法:

方法Method 描述Description 参数Argument 示例Example
id 该方法通过ID的属性值去定位查找单个元素 id: 需要被查找的元素的ID find_element_by_id('kw')
class name 该方法通过class的名称值去定位查找单个元素 class_name: 需要被查找的元素的类名 find_element_by_class_name('s_ipt')
name 该方法通过name的属性值去定位查找单个元素 name: 需要被查找的元素的名称 find_element_by_name('wd')
tag_name 该方法通过tag的名称值去定位查找单个元素 tag: 需要被查找的元素的标签名称 find_element_by_tag_name('input')
link_text 该方法通过链接文字去定位查找单个元素 link_text: 需要被查找的元素的链接文字 find_element_by_link_text('百度一下')
partial_link_text 该方法通过部分链接文字去定位查找单个元素 link_text: 需要被查找的元素的部分链接文字 find_element_by_partial_link_text('百度')
css_selector 该方法通过CSS选择器去定位查找单个元素 css_selector: 需要被查找的元素的ID find_element_by_css_selector('#su')
xpath 该方法通过XPath的值去定位查找单个元素 xpath: 需要被查找的元素的xpath find_element_by_xpath('//*[@id="su"]')


下来我们用代码针对百度进行演示

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/6/19 21:40
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : Day_3.1_chrome_option_warning.py
from selenium import webdriver
import time
options = webdriver.ChromeOptions()
options.add_argument('window-size=800,600')
options.add_argument('disable-infobars')
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# link_text 定位
driver.find_element_by_link_text('新闻').click()
time.sleep(1)
driver.back()
# id 定位
driver.find_element_by_id("kw").send_keys("id 定位|")
time.sleep(1)
# class name 定位
driver.find_element_by_class_name("s_ipt").send_keys("class name 定位|")
time.sleep(1)
# name 定位
driver.find_element_by_name("wd").send_keys("name 定位|")
time.sleep(1)
# css 定位
driver.find_element_by_css_selector("#kw").send_keys("css 定位|")
time.sleep(1)
# xpath 定位
driver.find_element_by_xpath("//input[@id='kw']").send_keys(" xpath 定位|")
time.sleep(1)
driver.quit()


效果如下:

image.png

几种定位方法演示


To Be Continue




相关文章
|
8月前
|
Web App开发 XML 前端开发
Selenium安装及八大元素定位方法&介绍及使用教程
Selenium是一个支持多种编程语言的自动化测试工具,用于Web应用的测试。它提供了多种元素定位策略,包括ID、Name、Class Name、Tag Name、Link Text、Partial Link Text、CSS Selector和XPath。安装Selenium需先确保Python和pip已安装,然后通过pip安装库,并下载对应浏览器的WebDriver。验证安装成功后,可通过编写简单脚本来打开网页并打印标题。注意WebDriver版本应与浏览器兼容,且可能需要额外的依赖包。文章还介绍了XPath的两种类型及其区别,推荐使用相对XPath以提高稳定性。
264 0
|
8月前
|
数据采集 前端开发 Java
《手把手教你》系列技巧篇(十一)-java+ selenium自动化测试-元素定位大法之By tag name(详细教程)
【4月更文挑战第3天】该文介绍了Selenium自动化测试中元素定位方法的By ClassName,强调了解前端基础知识对Web自动化测试的重要性。文章提到,当元素没有特定属性值(如ID、类名或名称)时,可以使用tagName定位器,例如在查找表格数据或验证链接数量时。但要注意,如果仅通过tagName定位,可能会导致选取多个元素,建议结合其他属性以更精确地定位单个元素。文中还提供了Java代码示例,展示了如何使用tagName定位元素并执行自动化测试。
139 6
|
8月前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(十三)-java+ selenium自动化测试-元素定位大法之By partial link text(详细教程)
【4月更文挑战第5天】本文介绍了Partial Link Text,这是一种用于网页自动化测试的方法,允许部分匹配超链接文本,尤其适用于长链接不便完全输入的情况。为确保准确性,建议选择具有唯一性的字符组合。文章列举了8种常用的定位方法,包括id、name、class name等,并重点讲解了partial link text。实战部分展示了如何通过 PartialLinkText 在百度首页找到并点击“打哭伊藤!孙颖莎:过瘾”这一热搜链接的代码示例。
125 2
|
8月前
|
Web App开发 前端开发 Java
《手把手教你》系列技巧篇(九)-java+ selenium自动化测试-元素定位大法之By name(详细教程)
【4月更文挑战第1天】 这篇教程介绍了如何使用Selenium Webdriver通过name属性来定位网页元素,作为系列教程的一部分,之前讲解了id定位,后续还会有其他六种定位方法。文中以百度搜索为例,详细说明了定位搜索框(name="wd")并输入关键词“北京宏哥”的步骤,包括手动操作流程、编写自动化脚本以及代码实现。此外,还提供了查看和理解Selenium源码的方法,强调了`open implementation`选项用于查看方法的具体实现。整个过程旨在帮助读者学习Selenium的元素定位,并实践自动化测试。
134 0
|
8月前
|
Web App开发 存储 JavaScript
《手把手教你》系列技巧篇(八)-java+ selenium自动化测试-元素定位大法之By id(详细教程)
【2月更文挑战第17天】本文介绍了Web自动化测试的核心——元素定位。文章首先强调了定位元素的重要性,指出找不到元素则无法进行后续操作。Selenium提供八种定位方法,包括By id、name、class name等。其中,By id是最简单快捷的方式。文章还阐述了自动化测试的步骤:定位元素、操作元素、验证结果和记录测试结果。此外,讨论了如何选择定位方法,推荐优先使用简单稳定的方式,如id,其次考虑其他方法。最后,作者提供了Chrome浏览器的开发者工具作为定位元素的工具,并给出了通过id定位的代码示例。
165 0
|
8月前
|
前端开发 Java 测试技术
《手把手教你》系列技巧篇(十二)-java+ selenium自动化测试-元素定位大法之By link text(详细教程)
【4月更文挑战第4天】本文介绍了link text在自动化测试中的应用。Link text是指网页中链接的文字描述,点击可跳转至其他页面。文章列举了8种常用的定位方法,其中着重讲解了link text定位,并通过实例展示了如何使用Java代码实现点击百度首页的“奥运奖牌榜 最新排名”链接,进入相应页面。如果link text不准确,则无法定位到元素,这说明linkText是精准匹配,而非模糊匹配。文章还提到了partial link text作为link text的模糊匹配版本,将在后续内容中介绍。
135 4
|
8月前
|
数据采集 前端开发 JavaScript
《手把手教你》系列技巧篇(十)-java+ selenium自动化测试-元素定位大法之By class name(详细教程)
【4月更文挑战第2天】该文介绍了WebDriver的元素定位方法,重点讲解了By ClassName。作者强调理解前端基础知识对自动化测试的重要性,并列举了8种定位方法,包括id、name、class name、tag name等。文中以百度搜索为例,展示了如何使用class name进行定位,并提供了相关Java代码。在实践中,注意class name含有空格时会导致定位失败的问题。
128 0
|
8月前
|
XML 前端开发 Java
《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
【4月更文挑战第6天】按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath。xpath 的定位方法, 非常强大。使用这种方法几乎可以定位到页面上的任意元素。xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XPath语言可以用在整棵树中寻找指定的节点。
119 0
|
5月前
|
设计模式 Java 测试技术
【Selenium使用误区】Iframe元素定位失败:避免误提GitHub Issue的技巧
本文分享了作者在使用Selenium进行UI自动化测试时遇到的一个常见问题:在模拟登录163邮箱的过程中,元素定位失败,原因是没有正确地定位到iframe内的元素。文章通过分析问题原因、提供解决方案和附录代码,指导读者如何避免类似的错误,并强调了在UI自动化测试中准确定位页面元素的重要性。
54 1
|
5月前
|
XML 前端开发 JavaScript
[selenium]元素定位
[selenium]元素定位

热门文章

最新文章