当前位置: 首页 > news >正文

了解Selenium中的WebElement

Selenium中到处都使用WebElement来执行各种操作。什么是WebElement?这篇文章将详细讨论WebElement。

Selenium中的WebElement是一个表示网站HTML元素的Java接口。HTML元素包含一个开始标记和一个结束标记,内容位于这两个标记之间。

HTML元素的重命名
<Tag> content </Tag>

HTML元素可以嵌套,如下所示-

<Tag1><Tag2> content</Tag2>
</Tag1>

所以,让我们回到WebElement是一个接口而不是一个类这一点。

WebElement接口的声明
public interface WebElement
extends SearchContext, TakesScreenshot

因此,WebElement扩展了另外两个接口,SearchContext和TakesScreenshot。

SearchContext接口声明了两个方法,可以根据情况帮助查找单个元素或元素列表。下面是SearchContext接口声明的方法:

  • List <WebElement>findElements(By by);
  • WebElement findElement(By by);

WebElement扩展了SearchContext接口,最后使用了上述方法。

TakesScreenshot接口只声明了一个有助于截图的方法。

  • X getScreenshotAs(OutputType target)抛出WebDriverException;

除了上述方法,WebElement接口还声明了一些方法-

  • void click()
  • public void run()
  • void sendKeys(CharSequence. keysToSend)
  • void clear()
  • String getTagName()
  • String getAttribute(String name)
  • boolean isSelected()
  • boolean isEnabled()
  • String getText()
  • List<WebElement> findElements(By by)[ WebElement还声明了SearchContext接口指定的findElements方法]
  • WebElement findElement(By by)[ WebElement还声明了findElement方法,该方法由SearchContext接口指定]
  • boolean isDisplayed()
  • getLocation()
  • getSize()
  • Rectangle getRect()
  • String getCssValue(String propertyName)

WebElement interface methods

现在的问题是,如果WebElement只是一个接口,那么哪个类实现了它的方法?

许多类实现了WebElement接口,如RemoteWebElement、HtmlUnitWebElement等,这些类实现了WebElement接口声明的方法。

我们不能在Java中创建接口的对象。但是,我们可以用接口的引用变量调用接口方法,这就是我们在调用WebElement接口的方法时所做的。

Reference variable of WebElement interface

// Here webelement is the reference variable
// of the WebElement interface
webElement.clear();
webElement.click();

但问题仍然存在。我们不能将WebElement作为一个接口来创建对象,我们需要一个实现WebElement接口声明的方法的对象。

这就是两种广泛使用的方法出现的地方。

  • List <WebElement>findElements(By by);
  • WebElement findElement(By by);

findElement方法返回一个实现WebElement接口方法的对象,而findElements返回这些对象的列表。

因此,每当我们编写WebElement element = findElement(By.id(“firstName”))时,它实际上使用WebElement接口引用变量并调用由findElement方法返回的对象的实现。

WebElement可以是任何类型。它可以是文本、按钮、复选框或HTML元素。WebElement方法不能应用于每个元素类型,就像我们不能清除按钮一样,所以我们不应该对按钮元素类型使用clear()方法。使用元素类型不支持的方法可能会也可能不会导致错误。

Selenium中的WebElement方法列表
方法名称这个方法做什么?
void clear()如果元素是文本输入元素,则此操作将清除该值,并且对其他元素没有影响。
void click()它点击元素。
WebElement findElement(By by)它查找与定位条件匹配的第一个元素。
List<WebElement> findElements(By by)它查找所有与定位条件匹配的元素。
String getAttribute(String name)它获取元素的给定属性的值
String getCssValue(String propertyName)它获取给定CSS属性的值。
getLocation()它返回一个包含元素左上角位置的点。
Rectangle getRect()它返回所呈现元素的位置和大小。
<X> X getScreenshotAs(OutputType<X> target)
 
它捕获屏幕截图并将其存储在指定位置。
getSize()它返回页面上元素的大小。
String getTagName()它返回此元素的标记名称。
String getText()它返回元素的可见文本,包括子元素。
boolean isDisplayed()它告诉元素是否显示。
boolean isEnabled()它说明元素当前是否已启用。
boolean isSelected()它告诉元素是否被选中。
void sendKeys(CharSequence. keysToSend)它模拟输入元素。
void submit()如果当前元素是一个表单或表单中的一个元素,那么它将被提交到远程服务器。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VulnHub:funbox10
  • 日常开发记录分享-SQL中的partition分区功能使用
  • 前端渲染模式
  • SSRF (服务端请求伪造)
  • Java的@DateTimeFormat注解与@JsonFormat注解的使用对比
  • 微服务-MybatisPlus下
  • vue3双向绑定的原理
  • Sping项目只能勾选17和21 (已解决) 导致的后续Invalid bound statement (not found):
  • 壹佰全家桶全应用源码在线更新升级
  • Redis快速入门基础
  • springboot集成mybatis时,dao层的mapper类需要添加@Repository注解吗?
  • C++树形结构(3 树的中心、重心)
  • Keil5软件仿真error65报错解决
  • 【Vulnhub系列】Vulnhub_SecureCode1靶场渗透(原创)
  • AJAX之原理
  • Android 架构优化~MVP 架构改造
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • ES2017异步函数现已正式可用
  • es6
  • JavaScript对象详解
  • mysql常用命令汇总
  • node入门
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 使用 Xcode 的 Target 区分开发和生产环境
  • ​如何防止网络攻击?
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #知识分享#笔记#学习方法
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • ()、[]、{}、(())、[[]]命令替换
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)基于IDEA的JAVA基础1
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)甲方乙方——赵民谈找工作
  • (转)视频码率,帧率和分辨率的联系与区别
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core Swagger 过滤部分Api
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Micro Framework初体验(二)
  • .NET Reactor简单使用教程
  • .NET 中的轻量级线程安全
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .Net的DataSet直接与SQL2005交互
  • .NET学习全景图
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • [1204 寻找子串位置] 解题报告