定位页面元素
Selenium使用WebDriver.findElement(By.locator())的方式定位页面元素。locator有下面几种方式: |方式|搜索依据| |------|-------| |By.className|class属性| |**By.cssSelector**|使用css选择器定位拥有特定css样式的元素| |By.id|id属性| |By.name|name属性| |By.tagName|节点名称| |**By.xpath**|节点路径| |By.linkText|连接的准确名称| |By.partialLinkText|连接名称包含字符|其中By.xpath与By.cssSelector是最为直观和准确的定位方式。
使用By.xpath时要注意,绝对路径以单/号表示,而相对路径则以//表示。另外需要多说一句的是,当xpath的路径以/开头时,表示让xpath解析引擎从文档的根节点开始解析。当xpath路径以//开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。Firefox的firebug,Chrome的开发者工具等许多工具可以帮助我们快速获取元素的xpath。而且一般不推荐使用绝对路径的写法,因为一旦页面结构发生变化,该路径也随之失效,必须重新写。
而Selenium官网的Document里极力推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XPath 解析器(Parser))他比xpath更高效更准确更易编写,美中不足是根据页面文字时略有缺陷没有xpath直接。
因为前端开发人员就是用CSS Selector设置页面上每一个元素的样式,无论那个元素的位置有多复杂,他们能定位到,那我们使用CSS Selector肯定也能非常精准的定位到页面Elements。
CSS 选择器参考手册:http://www.w3school.com.cn/cssref/css_selectors.asp
By.linkText与By.partialLinkText只依据连接显示的名称,不受任何格式标签,如<em>的影响。
获取页面信息
我们可以通过getXXX方法来获得页面或元素的信息: |方法|描述| |----|----| |WebDriver.get("url")|自动打开一个浏览器窗口并跳转到给定的url| |WebDriver.getTitle()|获得当前页面的标题| |WebDriver.getPageSource()|获取当前页面的源代码| |WebDriver.getText()|获取元素内的字符|导航命令
下面的命令可以帮助我们完成刷新,返回等导航操作: |方法|描述| |-----|-------| |WebDriver.navigate().to()|与get()一样,打开一个新的浏览器窗口并跳转到指定页面| |WebDriver.navigate().refresh()|刷新页面| |WebDriver.navigate().back()|返回到前一个页面| |WebDriver.navigate().forward()|前进到后一页面|关闭浏览器窗口
WebDriver.close() 只关闭浏览器窗口,driver仍然是可以操作的。
WebDriver.quit() 关闭所有窗口,并且退出driver。
切换
页面框:WebDriver.switchTo().frame() 弹出窗口:WebDriver.switchTo().alert() 窗口:WebDriver.switchTo().window()元素操作
下表是一些对页面元素的操作方法:Element | Command | Description |
Input Box | sendKeys() | used to enter values onto text boxes |
clear() | used to clear text boxes of its current value | |
Check Box, Radio Button, | click() | used to toggle the element on/off |
Links | click() | used to click on the link and wait for page load to complete before proceeding to the next command. |
Submit Button | submit() | |
Drop-Down Box | selectByVisibleText()/ deselectByVisibleText() | selects/deselects an option by its displayed text |
selectByValue()/ deselectByValue() | selects/deselects an option by the value of its "value" attribute | |
selectByIndex()/ deselectByIndex() | selects/deselects an option by its index | |
isMultiple() | returns TRUE if the drop-down element allows multiple selection at a time; FALSE if otherwise | |
deselectAll() | deselects all previously selected options |