Selenium中WebDriver和WebElement有什么区别?

3
什么是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();

1
你有更具体的问题吗?它们是完全不同的类。 - anonygoose
3个回答

4

WebDriver 接口

Selenium的角度来看,ChromeDriver和WebDriver在Selenium中有什么区别?接口类似于一个协议,第三方浏览器供应商MozillaChromeInternet ExplorerSafari等必须遵守并实现相同的协议。这将帮助最终用户使用公开的API编写通用代码,并在所有可用的浏览器上实现功能而不需要更改。


WebDriver driver = new FirefoxDriver();

这行代码创建了一个名为“driver”的实例,使用Firefox作为浏览器驱动。

WebDriver driver = new FirefoxDriver();

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

您可以在以下链接中找到详细讨论:


WebElement接口

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

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

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

你可以在Webdrivers返回的值中找到详细讨论。
每个元素都有一个关联的网页元素引用,该引用唯一地标识所有浏览上下文中的元素。表示相同元素的每个元素的网页元素引用必须相同。它必须是一个字符串,并且应该是生成UUID的结果。
如果ECMAScript Object具有网页元素标识符自有属性,则表示网页元素。
每个浏览上下文都有一个已知元素列表。当丢弃浏览上下文时,已知元素列表也会被丢弃。
你可以在为什么findElement(By by)的返回类型是WebElement?中找到详细讨论。
以下是一些常用的关联方法:
  • clear()清除输入框内容
  • click()点击元素
  • findElement(By by)查找单个元素
  • findElements(By by)查找多个元素
  • getAttribute(java.lang.String name)获取元素属性值
  • getCssValue(java.lang.String propertyName)获取元素CSS属性值
  • getLocation()获取元素位置
  • getRect()获取元素大小和位置
  • getSize()获取元素大小
  • getTagName()获取元素标签名
  • getText()获取元素文本
  • isDisplayed()判断元素是否可见
  • isEnabled()判断元素是否可用
  • isSelected()判断元素是否被选中
  • sendKeys(java.lang.CharSequence... keysToSend)向输入框发送文本
  • submit()提交表单

0

WebDriver类主要用于在浏览器中进行广义的操作。它可以加载页面,切换不同的窗口/框架,获取页面标题等。这些是与页面上的元素无关的广义操作。

WebElement类则专注于与您定位到的特定元素进行交互。例如:

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

WebDriver和WebElement之间唯一的重叠点是findElement和findElements方法。对于WebDriver来说,这些方法可以在页面的任何位置定位给定的By。而对于WebElement来说,这些方法会在该元素的上下文中定位给定的By(通常在元素内部)。


0
简单回答:
  • WebDriver专注于操纵浏览器。
  • WebElement只是像<button></button>这样的文档元素对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接