页面元素定位是自动化中最重要的工作, selenium Webdriver 提供了许多种元素定位的要领。 测试人员应该纯熟把握各类定位要领。 利用最简朴,最不变的定位要领。
自动化测试步调
在自动化测试进程中, 测试措施凡是的操纵页面元素步调
1. 找到Web的页面元素,并赋予到一个存储工具中 (WebElement)
2. 对存储页面元素的工具举办操纵, 譬喻:点击链接,在输入框中输入字符等
3. 验证页面上的元素是否切合预期
通过这三个步调,软件开发, 我们可以完成一个页面元素的操纵, 找到页面元素是很重要的一个步调。 找不到页面元素,后头就没法做了。
Web页面技能的现实巨大性, 造成大量的页面元素很难定位。 常常有人不知道怎么定位。
定位要领大全
利用WebDriver工具的findElement函数界说一个Web页面元素
利用findElements函数可以定位页面的多个元素
定位的页面元素需要利用WebElement工具来存储,以便后续利用
常用的定位页面元素要领如下, 按推荐排序
如何定位
在利用selenium webdriver举办元素定位时,凡是利用findElement或findElements要领团结By类返回元素句柄来定位元素
findElement() 要领返回一个元素, 假如没有找到,会抛出一个异常 NoElementFindException()
findElements()要领返回多个元素, 假如没有找到,会返回空数组, 不会抛出异常
如何选择定位要领
计策是, 选择简朴,不变的定位要领。
1. 当页面元素有id属性的时候,只管利用id来定位。没有的话再选择其他定位要领
2. cssSelector 执行速度快,推荐利用
3. 定位超链接的时候,可以思量linkText或partialLinkText:可是要留意的是 ,文本常常产生改变,所以不推荐用
3. xpath 成果最强悍。 其时执行速度慢,因为需要查找整个DOM, 所以只管罕用。 实在没有步伐的时候,才利用xpath
通过ID查找元素: By.id()
通过页面元素的ID来查找元素是最为推荐的方法, W3C尺度推荐开拓人员为每一个页面元素都提供唯一无二的ID属性
一旦元素被赋予了独一的ID属性., 我们做自动化测试的时候,很容易定位到元素. 元素的ID被作为首选的识别属性, 因为是最快的识别计策.
以百度主页为例, 搜索框的HTML示例代码如下, 它的ID为kw
<input type="text" autocomplete="off" maxlength="100" id="kw" name="wd" class="s_ipt">
“百度一下”搜索按钮元素的HTML示例代码如下, 它ID为su
<input type="submit" class="btn self-btn bg s_btn" id="su" value="百度一下">
在Selenium/WebDriver 中通过ID查找元素的Java示例代码如下
WebDriver driver = new FirefoxDriver(); driver.get("http://www.baidu.com"); WebElement searchBox = driver.findElement(By.id("kw")); searchBox.sendKeys("小坦克 博客园"); WebElement searchButton = driver.findElement(By.id("su")); searchButton.submit(); driver.close();
通过Name查找元素:By.name()
以豆瓣网的主页搜索框为例, 其搜索框的HTML代码如下, 它name是: q
<input type="text" autocomplete="off" name="q" placeholder="书籍、影戏、音乐、小组、小站、成员" size="12" maxlength="60">
WebDriver中通过name查找豆瓣主页上的搜索框的Java代码如下:
WebDriver driver = new FirefoxDriver(); driver.get("http://www.douban.com"); WebElement searchBox = driver.findElement(By.name("q")); searchBox.sendKeys("小坦克"); searchBox.submit();
通过TagName查找元素: By.tagName()
通过tagName来搜索元素的时候,会返回多个元素. 因此需要利用findElements()
WebDriver driver = new FirefoxDriver(); driver.get("http://www.cnblogs.com"); List<WebElement> buttons = driver.findElements(By.tagName("div")); System.out.println("Button:" + buttons.size());
留意: 假如利用tagName, 要留意许多HTML元素的tagName是沟通的,