Web测试及工具

Web测试及工具

整理下测试相关的东西在这里。

说到Web网页自动化测试,事实上的唯一标准就是基于WebDriver/Selenium的实现了。

说明: WebDriver 等同于Selenium2

WebDriver 介绍

WebDriver 是一个跨浏览器的网站自动化测试API,主要包含以下几方面

  • Browser Control: navigation, snapshotting, window control, override geolocation
  • User input simulation: mouse, keyborad, file uploads, altert handling
  • Web stuff: find/query elements, evaluate JavaScript, manipulate cookies

页面对象模型

页面对象模型是挺早就有的一个概念,现在也是实现的一个通用标准/最佳实践.

他的思想是应该暴露你要交互的服务而不是具体实现,即你的测试方法不应该包含最底层的WebDriver API。
如果某些复杂UI的层次结构只是用来组织UI,应该与page对象分离开。断言也应该与页面对象分离。
同时“页面”对象并不意味着为每个页面建立一个这样的对象,比如页面有重要意义的元素可以独立为一个page对象。

Martin Flower最早提出的Page Object英文版/中文版

页面对象的例子

  • Page(object)
    • init(self, testsetup)
    • get_url(self, url)
    • is_the_current_page
    • get_url_current_page
    • is_element_present(self, *locator)
    • is_element_visible(self, *locator)
    • return_to_previous_page
  • Base(Page)
  • Regions

一些流行语言的工具和框架实现

Selenium Server

# start the hub
java -jar selenium-server-standalone-2.47.0.jar -role hub -port 4444

# start the node
java -jar selenium-server-standalone-2.47.0.jar -role node -hub http://localhost:4444/grid/register
# 其他
java -jar selenium-server-standalone-{version}.jar -Dwebdriver.chrome.driver=/path/to/chromedriver
# Chrome Only
chromedriver --port=4444 --url-base=wd/hub

Python实现

Java实现

基本组成:

  • UI层: selenide
  • Report框架: allure
  • 断言框架: assertj-core/assertj-db
  • 基础测试框架: TestNG/JUnit

相关网站/文档:

Node.JS/JavaScript实现

响应式布局测试

Jenkins集成

SeleniumPlugin

浏览器辅助工具

Chrome

  • CSS Selector Helper for Chrome
  • Selenium Page Object Generator

Firefox

  • Firebug
  • Firefinder : Finds HTML elements matching chosen CSS selector(s) or XPath expression
  • xpathchecker : An interactive editor for XPath expressions – Firefox Extension
  • WebDriver Element Locator 2.0

示例

元素定位

CSS Selector

  • .class
  • #id
  • element [operator: , > + ~ ] element
  • [id]
  • :checked

参考文档CSS Selector/测试页/关于Selectors

关于等待

# Waiting for an element to appear
driver.wait(until.elementLocated(by.id('elementappearschild')), 10000, 'Could not locate the child element within the time specified');
# Waiting for an element to disappear
//Method1: driver.wait(until.elementIsNotVisible(element),10000);
//Method2 [better]:
driver.wait(function() {
return driver.isElementPresent(by.id('elementdisappears')).then(function(present) {
return !present;
});
}, 10000, 'The element was still present when it should have disappeared.');
# Waiting for an element’s text to change to a value
driver.wait(until.elementTextContains(element, 'new'),10000);

扩展阅读

发表评论

电子邮件地址不会被公开。 必填项已用*标注