selenium:
public static final Logger logger = LoggerFactory.getLogger(AssertUtil.class);
启动浏览器
System.setProperty("webdriver.firefox.bin","E:\\huohu\\firefox.exe");
FirefoxDriver driver = new FirefoxDriver();
八大定位元素
id,name,class_name,link_text,print_link_text
等待
//强制等待1S
Thread.sleep(1000);
//隐式等待等待5秒
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
//显式等待3秒
WebDriverWait wait = new WebDriverWait(driver, 3);
//3秒内找不到此元素,TimeOutException报错
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.name("wd")))
ExpectedConditions其他用法*********
titleIs判断当前页面的title是否等于预期。
titleContains判断当前页面的title是否包含预期字符串。
urlToBe判断当前页面的url是否等于预期。
urlContains判断当前页面的url是否包含预期字符串。
presenceOfElementLocated判断元素是否出现,出现就通过。
visibilityOfElementLocated判断某个元素是否可见,可见代表元素非隐藏。
elementToBeSelected页面元素处于被选中状态。
————————————————
获取表格元素
public static void getRangeFromRows(WebDriver driver){
WebElement table= driver.findElement(By.xpath("//*[@id='product_mgt_wrap']/div[1]/div[2]/div[2]/div[2]/div[2]/table"));
List<WebElement> rows = table.findElements(By.tagName("tr"));
for(WebElement row:rows){
List<WebElement> col = row.findElements(By.tagName("td"));
for(WebElement cell:col){
System.out.print(cell.getText() + "\t");
}
System.out.print("\n\t");
}
}
获取下拉框
<select name='唐代诗人' id='poet'>
<option value='01'>李白</option>
<option value='02'>李白2</option>
<option value='03'>李白3</option>
<select>
// 定位select标签下拉框
WebElement ele=driver.findElement(By.id("poet"));
// 实例化select方法
Select select_ele=new Select(ele);
// 通过select索引定位选择下拉框元素,注意索引从0开始
select_ele.selectByIndex(1);
// 通过select的value定位选择下拉框元素
select_ele.selectByValue("03");
// 通过select的文本内容定位选择下拉框元素
select_ele.selectByVisibleText("白居易");
模拟鼠标移动
Actions action = new Actions(driver);
action.dragAndDrop(driver.findElementByLinkText("新闻"),driver.findElementByLinkText("设置")).perform(); //鼠标从一个位置移动到指定位置
断言
==1.“断言方式:equalToIgnoringCase 实际值:” + actual + " 期望值:" + expect
try {
assertThat(errMsg, actual, equalToIgnoringCase(expect));
} catch (AssertionError e) {
logger.error(errMsg, e);
throw e;
}
TestNG中常用的断言方法:
assertEquals(String actual, String expected) //判断真实值与预期值是否相等,如果不相等测试失败会抛出一个异常
assertEqual(String actual,String expected, Stringmessage) //检查两个字符串是否相等, 如果不相等,测试失败, 且在抛出异常中打印出我们提供的第三个message参数信息
assertTrue(boolean condition) //如果值为true,则用例通过,否则抛出一个AssertionError异常
assertFalse(boolean condition)
通过一下的方法可以获取当前的信息。
getTitle(): 用于获得当前页面的title。
getCurrentUrl() : 用户获得当前页面的URL。
getSourcePage() 获取页面文本信息
二、断言的三种形式:assert 、verify、waitfor
Assert 失败时,该测试将终止。
Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上。
Waitfor用于等待某些条件变为真。可用于AJAX应用程序的测试。
如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超时时间。 一般跟setTimeout时间一起用
pom文件内容
日志打印jar包,selenium依赖-,自动化报告打包extentreports,testng-extentsreport;保存为实际的对象
quit,close区别
close方法是,关闭当前窗口
quit方法就是直接退出并关闭所有关联的tab窗口。
测试报告编写
一、概要
1、编写目的:背景,测试内容,
2、测试人员
3、测试环境
4.测试资源
二、测试过程
1、测试进度
2、用例执行情况
3、缺陷统计==修复率=bug修复/bug总数
三、缺陷分析
1、按照模块
2.按照级别
3.按照版本趋势
四、测试总结
1、测试结论
本次测试通过,执行率100%,通过率95.3%,修复率为89.9%,遗留缺陷有4个,轻微缺陷有2个,次要缺陷2个
2、测试风险
testng
suit-test-classes-class-methods-include
listeners
接口httpclient
步骤
1.创建一个可关闭的httpclient对象
2.new HttpPost(url);
3.设置构造一个contentbody实现类对象
4.设置构造一个上传文件的entity
5.设置上传的ContentType,设置浏览器模式
6.new StringBody防止普通的表单字段如含有中文的话会乱码
7.给MultipartEntityBuilder的entity设置HttpEntity上传参数
8.给httppost.setEntity值
9.设置一个可关闭的CloseableHttpResponse
10.抛异常
11.获取客户端的.execut(httpPost); 返回一个response
12.获取response的.getEntity()应该是实体类,
13.以JSON格式获取到反馈的主体
public JSONObject getBodyInJSON() throws ParseException, IOException{
HttpEntity entity;
String entityToString;
entity = httpResponse.getEntity();
entityToString = EntityUtils.toString(entity);
responseBody = JSON.parseObject(entityToString);
System.out.println("This is your response body" + responseBody);
return responseBody;
}
//以哈希图的方式获取到反馈头部
public HashMap getHeaderInHash(){
Header[] headers;
headers = httpResponse.getAllHeaders();
responseHeads = new HashMap();
for(Header header:headers){
responseHeads.put(header.getName(), header.getValue());
}
System.out.println("This is your response header" + responseHeads);
return responseHeads;
}
//获取反馈状态码
public int getCodeInNumber(){
responseCode = httpResponse.getStatusLine().getStatusCode();
System.out.println("This is your response code" + responseCode);
return responseCode;
}
getResponse:发送请求并获取反馈;
getBodyInJSON:获取JSON格式的反馈主体;
getCodeInNumber:获取反馈状态码;
getHeaderInHash:获取哈希图形式的反馈头;
=http请求头有哪些
HTTP Request Header 请求头:
Content-Length:请求的内容长度。
Content-Type:请求的与实体对应的MIME信息。
Referer:先前网页的地址,当前请求网页紧随其后,即来路。
Host:指定请求的服务器的域名和端口号。
Date:请求发送的日期和时间。
Accept:指定客户端能够接收的内容类型。
Accept-Charset:浏览器可以接受的字符编码集。
HTTP Responses Header 响应头:
Content-Language:响应体的语言。
Content-Length:响应体的长度。
Content-Type:返回内容的MIME类型。
Date:原始服务器消息发出的时间。
Warning:警告实体可能存在的问题。