了解Selenium中的WebElement

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

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

HTML元素的重命名
html 复制代码
<Tag> content </Tag>

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

html 复制代码
<Tag1>
 <Tag2> 
   content
 </Tag2>
</Tag1>

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

WebElement接口的声明
java 复制代码
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只是一个接口,那么哪个类实现了它的方法?

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

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

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

相关推荐
程序员小远6 小时前
自动化测试基础知识总结
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
程序员三藏21 小时前
Web自动化测试详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
深蓝电商API1 天前
Selenium 5.0 全新架构解析:值得升级吗?
爬虫·selenium
小白学大数据4 天前
线上故障急救:依托 OpenClaw 日志排查 403 和 503 问题
爬虫·python·selenium·数据分析
糖果店的幽灵4 天前
AI 驱动 Selenium 测试框架最佳实践:从传统自动化到智能体测试
人工智能·selenium·自动化
Maydaycxc4 天前
Python 实现 RPA + AI 自动化:大模型 OCR + 网页操作完整源码实战
人工智能·python·opencv·selenium·自动化·ocr·rpa
赵大大宝4 天前
Selenium 从入门到精通:自动化测试与爬虫实战全攻略
爬虫·selenium·测试工具
深蓝电商API7 天前
Playwright vs Puppeteer vs Selenium 2026终极对比
爬虫·selenium·puppeteer·playwright
ClouGence9 天前
不用写 Selenium,零代码的 UI 自动化测试工具!
selenium·测试
@zulnger11 天前
selenium 操作浏览器
前端·javascript·selenium