Selenium 中的 WebDriver 和 WebElement 有什么区别?

What is the difference between WebDriver and WebElement in Selenium?

提问人:Elegant Student 提问时间:10/12/2018 最后编辑:undetected SeleniumElegant Student 更新时间:2/28/2022 访问量:11223

问:

Selenium 中的 WebDriver 和 WebElement 有什么区别?

示例代码:

WebDriver driver = new FirefoxDriver();      
driver.get("http://www.google.com");      
WebElement s  = driver.findElement(By.name("q"));      
s.sendKeys("Packt Publishing");      
s.submit();
Selenium Selenium-Web Web驱动程序

评论

1赞 anonygoose 10/12/2018
您有更具体的问题吗?它们是完全不同的类。

答:

0赞 anonygoose 10/13/2018 #1

WebDriver 类侧重于从广义上驱动浏览器。它加载页面,切换到不同的窗口/框架,获取页面标题等。不特定于页面上元素的广泛操作。

WebElement 专注于与已找到的特定元素进行交互。比如:

  • 单击该特定元素
  • 从该特定元素中检索文本和其他值
  • 找出特定元素的位置
  • 向该特定元素发送文本(如填充输入字段)

WebDriver 和 WebElement 之间唯一真正的重叠是 findElement 和 findElements 方法。对于 Webdriver,这些方法在页面上的任意位置找到给定的 By。对于 WebElement,这些方法在该元素的上下文中(通常在其中)找到给定的 By。

4赞 undetected Selenium 10/15/2018 #2

WebDriver 接口

Selenium 的角度来看,selenium 中的 ChromeDriver 和 WebDriver 有什么区别? 界面类似于第三方浏览器供应商(如 MozillaChromeInternet ExplorerSafari 等)必须遵守并实施的协议。这反过来又可以帮助最终用户使用公开的 API 来编写通用代码,并在所有可用的浏览器上实现功能,而无需进行任何更改。


WebDriver 驱动程序 = new FirefoxDriver();

通过代码行:

WebDriver driver = new FirefoxDriver();

我们正在创建一个 WebDriver 接口的实例,并将其强制转换为 FirefoxDriver 类。所有的浏览器驱动程序,如FirefoxDriver,ChromeDriver,InternetExplorerDriver,PhantomJSDriver,SafariDriver等都实现了WebDriver接口(实际上RemoteWebDriver类实现了WebDriver接口浏览器驱动程序扩展了RemoteWebDriver)。 因此,如果我们使用 ,那么我们可以将已经初始化的驱动程序实例(作为公共对象变量)用于我们想要自动化的所有浏览器,例如 Mozilla、Chrome、InternetExplorer、PhantomJS、Safari。WebDriver driver

WebDriver driver = new FirefoxDriver();
driver = new ChromeDriver();
driver = new FirefoxDriver();
driver = new SafariDriver();

您可以在以下位置找到详细的讨论:


WebElement 接口

Selenium 的角度来看,WebElement 表示一个 HTML 元素。通常,与页面交互的所有操作都将通过此接口执行。

WebElement 是用于标识 Element 节点的抽象,当它通过协议在远程和本地端之间传输时,简称为元素。Web 元素标识符是字符串常量,表示为:

"element-6066-11e4-a52e-4f735466cecf"

可以在 Webdrivers 返回的值中找到详细讨论

每个元素都有一个关联的 Web 元素引用,该引用在所有浏览上下文中唯一标识该元素。表示同一元素的每个元素的 Web 元素引用必须相同。它必须是一个字符串,并且应该是生成 UUID 的结果。

如果 ECMAScript 对象具有 Web 元素标识符 own 属性,则表示 Web 元素。

每个浏览上下文都有一个关联的已知元素列表。当浏览上下文被丢弃时,已知元素的列表也会随之被丢弃。

您可以在 为什么 findElement(By by) 的返回类型是 WebElement?

一些常用的关联方法如下:

  • clear()
  • click()
  • findElement(By by)
  • findElements(By by)
  • getAttribute(java.lang.String name)
  • getCssValue(java.lang.String propertyName)
  • getLocation()
  • getRect()
  • getSize()
  • getTagName()
  • getText()
  • isDisplayed()
  • isEnabled()
  • isSelected()
  • sendKeys(java.lang.CharSequence... keysToSend)
  • submit()
0赞 tenshi 2/28/2022 #3

简单的答案:

  • WebDriver 专注于操作浏览器。
  • WebElement 只是一个 Document 元素对象,如<button></button>