【第二章 selenium基本操作之元素】

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

系列文章目录

第一章 【初识selenium自动化测试框架(详细记录)】



一、元素

1). F12进入开发调试工具(DevTools)
2). 选择图中红圈的箭头(select element),则鼠标放到相应元素上可看获取到信息,例如属性与内容等

或者右键点击某个元素,选择检查
【第二章 selenium基本操作之元素】


二、选择元素

1 id

规范性的网站一般id是唯一的(在html中是标记该元素的)
本节使用的学习网址
【第二章 selenium基本操作之元素】
代码如下
1)

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

# 创建 WebDriver 对象
wd = webdriver.Chrome()

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.byhy.net/_files/stock1.html')

# 根据id选择元素,返回的就是该元素对应的WebElement对象
element = wd.find_element(By.ID, 'kw')

# 通过该 WebElement对象,就可以对页面元素进行操作了
# 比如输入字符串到 这个 输入框里
element.send_keys('通讯\n')

2)
或者
basic_str 文件中

GUPIAO_URL= "https://www.byhy.net/_files/stock1.html"
GUPIAO_ID = "kw"
GUPIAO_SEARCH_BTN_ID = "go"

elementType 文件中

from selenium import webdriver
import basicStr as Str

wd = webdriver.Chrome()
wd.get('https://www.byhy.net/_files/stock1.html')

wd.find_element_by_id(Str.GUPIAO_ID).send_keys("通讯")
wd.find_element_by_id(Str.GUPIAO_SEARCH_BTN_ID).click()

wd.quit()

但是!

ps:Selenium 升级到版本 4 以后, 下面这种 find_element_by* 方法都作为过期不赞成的写法

wd.find_element(By.ID, 'username').send_keys('byhy')
wd.find_element(By.CLASS_NAME, 'password').send_keys('sdfsdf')
wd.find_element(By.TAG_NAME, 'input').send_keys('sdfsdf')
wd.find_element(By.CSS_SELECTOR,'button[type=submit]').click()

运行会有告警,应为如下

from selenium.webdriver.common.by import By

wd.find_element(By.ID, 'username').send_keys('byhy')
wd.find_element(By.CLASS_NAME, 'password').send_keys('sdfsdf')
wd.find_element(By.TAG_NAME, 'input').send_keys('sdfsdf')
wd.find_element(By.CSS_SELECTOR,'button[type=submit]').click()
  1. 补充
    使用try去判断界面元素是否存在
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException

# 创建 WebDriver 对象
wd = webdriver.Chrome()

# 调用WebDriver 对象的get方法 可以让浏览器打开指定网址
wd.get('https://www.byhy.net/_files/stock1.html')

##判断界面元素是否存在,用try去捕获
 try:
     # 根据id选择元素,返回的就是该元素对应的WebElement对象
     element = wd.find_element(By.ID, 'kw')
 except NoSuchElementException:
     print('no exist')
     wd.quit()

element = wd.find_element(By.ID, 'kw')
# 通过该 WebElement对象,就可以对页面元素进行操作了,比如输入字符串到 这个 输入框里
element.send_keys('通讯\n')

wd.quit()

总结:wd 赋值的是 WebDriver 类型的对象,通过这个对象来操控浏览器,比如打开网址、选择界面元素等。以上WebDriver对象的方法 find_element

以上程序用文字解释为

  • 发起一个请求通过 浏览器驱动 转发给浏览器,告诉它,需要选择一个id为 kw 的元素。
  • 浏览器 找到id为kw的元素后,将结果通过 浏览器驱动 返回给自动化程序, 所以 find_element 方法会 返回一个 WebElement 类型的对象。

这个WebElement 对象可以看成是对应页面元素的遥控器。
我们通过这个WebElement对象,就可以操控对应的界面元素。
参考网站


2. class属性

class 属性就用来标志着元素类型 ,本节使用的学习网址

所有的植物元素都有个class属性 值为 plant。
所有的动物元素都有个class属性 值为 animal。
【第二章 selenium基本操作之元素】
如果我们要选择 所有的 动物, 就像下面可以这样写,

wd.find_elements(By.CLASS_NAME, 'animal')
  • 注意:
    find_elements 返回的是找到的符合条件的 所有元素 (这里有3个元素), 放在一个 列表 中返回。
    而如果我们使用 wd.find_element (注意少了一个s) 方法, 就只会返回 第一个 元素。

通过wd.find_elements方法

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

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements(By.CLASS_NAME, 'animal')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.text)

wd.quit()

运行结果为:
【第二章 selenium基本操作之元素】

  • 通过 WebElement 对象的 text属性可以获取该元素在网页中的文本内容。所以可以打印出 element 对应网页元素的文本
    【第二章 selenium基本操作之元素】

通过wd.find_element方法(是element不是elements哦)

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

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
element = wd.find_element(By.CLASS_NAME, 'animal')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容

print(element.text)

wd.quit()

运行结果为:

狮子

Process finished with exit code 0

3. tag名

类似可以通过指定 参数为 By.TAG_NAME ,选择所有的tag名为 div的元素
【第二章 selenium基本操作之元素】

运行代码类似

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

wd = webdriver.Chrome()

wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 tag name 选择元素,返回的是 一个列表
# 里面 都是 tag 名为 div 的元素对应的 WebElement对象
elements = wd.find_elements(By.TAG_NAME, 'div')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.text)
    
wd.quit()

运行结果为:

土豆
洋葱
白菜
狮子
老虎
山羊
内层11
内层12
内层21
内层11
内层12
内层11
内层12
内层21
内层21
版权 发布日期:2018-03-03
备案号 苏ICP备88885574号
版权 发布日期:2018-03-03
备案号 苏ICP备88885574号

Process finished with exit code 0

4. 等待时间

由于代码执行的速度比网站响应的速度快。所以要在代码中加入等待时间。
1)显式等待
可以设置等待时间,如下所示

from time import sleep
sleep(1)

缺点:时间无法精准把握

2)隐式等待
Selenium提供了一个更合理的解决方案,
当发现元素没有找到的时候, 并不立即返回 找不到元素的错误。而是周期性(每隔半秒钟)重新寻找该元素,直到该元素找到,或者超出指定最大等待时长,这时抛出异常(如果是 find_elements 之类的方法, 则是返回空列表)。
implicitly_wait 用来指定 最大等待时长。

wd.implicitly_wait(10)

三、操控元素

选择到元素之后,我们的代码会返回元素对应的 WebElement对象,通过这个对象,我们就可以 操控 元素了。

操控元素通常包括:

  • 点击元素
  • 在元素中输入字符串,通常是对输入框这样的元素
  • 获取元素包含的信息,比如文本内容,元素的属性

1.点击元素

对click方法的补充:
当我们调用 WebElement 对象的 click 方法去点击 元素的时候, 浏览器接收到自动化命令,点击的是该元素的 中心点 位置 。

wd.find_element(By.ID, 'username').click()

2.输入与清除

调用元素WebElement对象的send_keys方法

学习网址
【第二章 selenium基本操作之元素】

要把输入框中已经有的内容清除掉,可以使用WebElement对象的clear方法

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

wd = webdriver.Chrome()
wd.implicitly_wait(10)

wd.get('https://cdn2.byhy.net/files/selenium/test3.html')

element = wd.find_element(By.ID, "input1")

# 清除输入框已有的字符串
element.clear()
# 输入新字符串
element.send_keys('lll')

wd.quit()

3. 获取元素信息

3.1 获取文本内容

1)WebElement对象的 text 属性

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

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements(By.CLASS_NAME, 'animal')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.text)

wd.quit()

2)但是,有时候,元素的文本内容没有展示在界面上,或者没有完全完全展示在界面上。 这时,用WebElement对象的text属性,获取文本内容,就会有问题。出现这种情况,可以尝试使用
element.get_attribute(‘innerText’) ,
或者 element.get_attribute(‘textContent’)

3.2 获取元素属性

通过WebElement对象的 get_attribute 方法来获取元素的属性值

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

# 创建 WebDriver 实例对象,指明使用chrome浏览器驱动
wd = webdriver.Chrome()

# WebDriver 实例对象的get方法 可以让浏览器打开指定网址
wd.get('https://cdn2.byhy.net/files/selenium/sample1.html')

# 根据 class name 选择元素,返回的是 一个列表
# 里面 都是class 属性值为 animal的元素对应的 WebElement对象
elements = wd.find_elements(By.CLASS_NAME, 'animal')

# 取出列表中的每个 WebElement对象,打印出其text属性的值
# text属性就是该 WebElement对象对应的元素在网页中的文本内容
for element in elements:
    print(element.get_attribute('class'))

wd.quit()

3.3 获取元素对应html

1)要获取整个元素对应的HTML文本内容,可以使用 element.get_attribute(‘outerHTML’)

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

wd = webdriver.Chrome()
wd.implicitly_wait(10)

wd.get('https://www.byhy.net/_files/stock1.html')

element = wd.find_element(By.ID, '1')

print(element.get_attribute('outerHTML'))

wd.quit()

运行结果显示:

Connected to pydev debugger (build 203.7717.81)
<div class="result-item" id="1">
          <p class="name">包钢股份</p>
          <p>代码:<span>600010</span></p>
        </div>

Process finished with exit code 0

2)如果,只是想获取某个元素 内部 的HTML文本内容,可以使用 element.get_attribute(‘innerHTML’)

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

wd = webdriver.Chrome()
wd.implicitly_wait(10)

wd.get('https://www.byhy.net/_files/stock1.html')

element = wd.find_element(By.ID, '1')

print(element.get_attribute('innerHTML'))

wd.quit()

运行结果显示:

Connected to pydev debugger (build 203.7717.81)

          <p class="name">包钢股份</p>
          <p>代码:<span>600010</span></p>
        

Process finished with exit code 0

3.4 获取输入框里面的文字

对于input输入框的元素,要获取里面的输入文本,用text属性是不行的,这时可以使用 element.get_attribute(‘value’)

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

wd = webdriver.Chrome()
wd.implicitly_wait(10)

wd.get('https://www.byhy.net/_files/stock1.html')

element = wd.find_element(By.ID, 'kw')
element.send_keys('lll')
print(element.get_attribute('value'))

wd.quit()

运行结果为:

Connected to pydev debugger (build 203.7717.81)
lll

Process finished with exit code 0


四、总结

本文主要记录了三方面的学习分别是:

  • 元素介绍
  • 元素选择
  • 元素操控

此部分内容虽然较为简单,但是在学习的过程仍遇到一些困难,以下为注意事项

1.千万不要忘记wd.quit(),否则程序一直等待
2.当出现程序无法结束的情况,也可以杀后台chromedrive
3.虽然加入了隐式等待,但是debug还是最稳妥的方法


参考自:白月黑羽文章来源地址https://www.toymoban.com/news/detail-474340.html

到了这里,关于【第二章 selenium基本操作之元素】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C++第二章:变量和基本内置类型

    C++定义了一套包括算数类型和空类型在内的基本数据类型。 其中算数类型包含了字符、整形数、布尔值、浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是:当一个函数不返回任何值时使用空类型作为返回类型。 算数类型分为两种:整形(包括字符和

    2024年02月06日
    浏览(42)
  • 操作系统——第二章

    一.单选题(共30题,60.0分) 1 ()是指从作业提交给系统到作业完成的时间间隔 (2.0分) A、 周转时间 B、 响应时间 C、 等待时间 D、 运行时间 正确答案: A 2 引入多道程序设计技术之后,处理器的利用率() (2.0分) A、 有所改善 B、 极大提高 C、 降低 D、 无变化 正确答

    2023年04月08日
    浏览(52)
  • Maven第二章:Maven基本概念与生命周期

    前言 本章主要内容,介绍Maven基本概念,包括maven坐标含义,命名规则,继承与聚合、了解与理解生命周期,如何通过Maven进行依赖和版本管理。 什么是Maven的坐标? Maven坐标是一种标识Maven项目的信息,它包含了项目的唯一标识符和项目的版本号等信息。Maven坐标的作用是唯

    2024年02月07日
    浏览(39)
  • 〖Python WEB 自动化测试实战篇⑦〗- 实战 - selenium的基本元素操作与键盘鼠标模拟事件操作

    订阅 Python全栈白宝书-零基础入门篇 可报销! 白嫖入口-请点击我。 推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏, 免费阶段订阅数量4300+ , 购买任意白宝书体系化专栏可加入 TFS-CLUB 私域社区。 福利:加入社区的小伙

    2023年04月08日
    浏览(70)
  • 操作系统(第二章-进程管理)

    目录 一、程序执行 1. 前趋图  2. 程序的顺序执行  3. 程序的并发执行  二、进程的描述      (一)、进程的概念  1. 进程的定义  2. 进程的特征      (二)、进程的状态极其转换  1. 进程的三种基本状态 (1)就绪状态  (2)运行状态 (3)等待状态 2. 进程状态的转换

    2024年01月22日
    浏览(53)
  • 操作系统第二章练习题

    第三部分 选择题 1、在进程管理中,当(     )时,进程从阻塞状态变为就绪状态。   C  A.进程被进程调度程序选中              B.等待某一事件 C.等待的事件发生                       D.时间片用完 2、分配到必要的资源并获得处理机时的进程状态是(

    2024年02月07日
    浏览(53)
  • Mysql第二章 多表查询的操作

    因为直接连接多表时,笛卡尔积的问题引出了多表联查的问题,多表查询基本分为三类,外连接和内连接,等值和非等值,自连接和非自连接 这些连接关系,归根结底是集合的交并补运算 求出两个表的公共部分,叫做内连接,相当于是交集 求出两个表的公共部分加上左边的

    2024年02月04日
    浏览(45)
  • Linux操作系统——第二章 进程控制

        目录 进程创建 fork函数初识 fork函数返回值 写时拷贝 fork常规用法 fork调用失败的原因 进程终止 进程退出场景 进程常见退出方法 _exit函数 exit函数 return退出 进程等待 进程等待必要性 进程等待的方法 wait方法 waitpid方法 获取子进程status 进程程序替换 替换原理 替换函数

    2024年02月08日
    浏览(50)
  • 第二章 Flink集成Iceberg的集成方式及基本SQL使用

    注意事项:一般都是用基于Flink的Hive Catalog,使用HMS存储表模型数据 1、集成方式 (1)下载jar包 下载地址 (2)启动FlinkSQL ①StandLone模式启动 ②Flink On Yarn模式启动 2、基本使用 2.1、创建catalog 核心:可创建hive、hadoop、自定义等目录,创建模板如下 type : 必须的 iceberg 。(必需

    2024年02月08日
    浏览(41)
  • 第二十二章:HBase的CRUD操作

    HBase是一个分布式、可扩展、高性能的列式存储系统,基于Google的Bigtable设计。它是Hadoop生态系统的一部分,可以与HDFS、MapReduce、ZooKeeper等组件集成。HBase具有高可靠性、高性能和高可扩展性,适用于大规模数据存储和实时数据访问场景。 在HBase中,数据以行为单位存储,每行

    2024年02月20日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包