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();
答案 0 :(得分:1)
从 Selenium 角度来看, WebDriver接口类似于第三方浏览器供应商之类的协议,例如 Mozilla , Chrome , Internet Explorer , Safari 等必须遵循并实现相同的功能。反过来,这将帮助最终用户使用公开的API编写通用代码并在所有可用的Browsers
上实现功能,而无需进行任何更改。
通过WebDriver driver = new FirefoxDriver();
,我们将创建 WebDriver 接口的实例,并广播到 FirefoxDriver类。 {em> FirefoxDriver,ChromeDriver,InternetExplorerDriver,PhantomJSDriver,SafariDriver等所有浏览器驱动程序均实现了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代表HTML元素。通常,与页面交互有关的所有操作都将通过此界面执行。
WebElement 是一种抽象,用于标识通过协议在远程端和本地端之间传输的Element nodes and are simply known as elements。 Web元素标识符是字符串常量,表示为:
"element-6066-11e4-a52e-4f735466cecf"
您可以在Values returned by webdrivers
中找到详细的讨论每个元素都有一个关联的Web元素引用,该引用在所有浏览上下文中唯一标识该元素。表示同一元素的每个元素的Web元素引用必须相同。它必须是一个字符串,并且应该是生成UUID的结果。
如果ECMAScript Object具有Web元素标识符自身的属性,则表示Web元素。
每个浏览上下文都有一个关联的已知元素列表。丢弃浏览上下文时,已知元素的列表也会随之丢弃。
您可以在Why return type of findElement(By by) is 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()
答案 1 :(得分:0)
WebDriver 类专注于以广泛的方式驱动浏览器。它会加载页面,切换到不同的窗口/框架,获取页面标题等。不是特定于页面元素的广泛操作。
WebElement 专注于与您找到的 specific 元素进行交互。像这样的东西:
WebDriver和WebElement之间唯一真正的重叠是findElement和findElements方法。对于 Webdriver ,这些方法可在页面上的任意位置找到给定的“按”。对于 WebElement ,这些方法将给定的By定位在该元素的上下文中(通常在其内部)。