Angularjs 量角器:可以测试我的应用程序中没有404吗?
我是新来的量角器,我想写一个测试,看看有没有锚与URL给出404错误 我已经看过了,但是只针对一个确定的链接,我想对页面中的所有链接都这样做 测试应该通过http状态200,如下所述 我有两个问题:Angularjs 量角器:可以测试我的应用程序中没有404吗?,angularjs,testing,protractor,e2e-testing,Angularjs,Testing,Protractor,E2e Testing,我是新来的量角器,我想写一个测试,看看有没有锚与URL给出404错误 我已经看过了,但是只针对一个确定的链接,我想对页面中的所有链接都这样做 测试应该通过http状态200,如下所述 我有两个问题: 这个测试在量角器中有意义吗 有可能测试这个吗?如果是,怎么做 我认为这绝对是可行的,如果范围有限,那么这样做是有意义的,因为这不是SeleniumWebDriver用于的典型UI测试。您可以做一些类似的事情,查找所有链接,在url下面获取,并使用类似的模块发出get请求。这是一个伪代码 var r
- 这个测试在量角器中有意义吗
- 有可能测试这个吗?如果是,怎么做
var request = require('request');
var assert = require('assert');
element.all(by.tagName('a')).then(function(link) {
var url = link.getAttribute('href');
if(url) {
request(url, function (error, response, body) {
assert.equal(response.statusCode, 200, 'Status code is not OK');
});
}
});
在这里,我编写了一个java演示,它可能满足您的需求。此外,我不熟悉量角器,但希望这能有所帮助
package com.selenium.webdriver.test;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.methods.GetMethod;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class Traverse {
private WebDriver driver;
private String baseUrl;
private Map<String, String> tMap;
public Traverse(String url) {
driver = new HtmlUnitDriver();
baseUrl = url;
tMap = new HashMap<String,String>();
}
//get status code.
public int getRespStatusCodeByGet(String url) throws HttpException, IOException {
GetMethod method = new GetMethod(url);
HttpClient client = new HttpClient();
client.executeMethod(method);
return method.getStatusCode();
}
//single page traversal
public boolean search(String url) throws HttpException, IOException {
if(getRespStatusCodeByGet(url) != 200) {
System.out.println("Bad page " + url);
return false;
}
driver.get(url);
List<WebElement> elements = driver.findElements(By.tagName("a"));
for(int i=0; i<elements.size(); i++) {
String cUrl = elements.get(i).getAttribute("href");
String cText = elements.get(i).getText();
if(cUrl != null && cUrl.startsWith("http") && !tMap.containsKey(cText)) {
tMap.put(cText, cUrl);
System.out.println(cUrl);
search(cUrl);
}
}
return true;
}
//client
public static void main(String[] args) throws HttpException, IOException {
Traverse t = new Traverse("http://www.oktest.me/");
t.search(t.baseUrl);
}
}
package com.selenium.webdriver.test;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入org.apache.commons.httpclient.httpclient;
导入org.apache.commons.httpclient.HttpException;
导入org.apache.commons.httpclient.methods.GetMethod;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.htmlunit.HtmlUnitDriver;
公共类遍历{
私有网络驱动程序;
私有字符串baseUrl;
专用地图tMap;
公共遍历(字符串url){
driver=新的HtmlUnitDriver();
baseUrl=url;
tMap=newhashmap();
}
//获取状态代码。
public int getRespStatusCodeByGet(字符串url)抛出HttpException、IOException{
GetMethod=新的GetMethod(url);
HttpClient=新的HttpClient();
客户端执行方法(方法);
返回方法。getStatusCode();
}
//单页遍历
公共布尔搜索(字符串url)引发HttpException、IOException{
如果(getRespStatusCodeByGet(url)!=200){
System.out.println(“坏页”+url);
返回false;
}
获取(url);
列表元素=driver.findElements(按.tagName(“a”));
对于(inti=0;i我想将其实现为一个页面对象,这样我就可以为每个页面规范文件使用一个简单的一行expect语句。事后我认为,这可以通过使用API测试框架(例如)以更简单的方式实现,但下面是如何使用量角器和jasmine实现它(使用ES2015语法,以便更新到当前版本)!请记住安装request、bluebird和request promise npm软件包
PageObject.js
crawlLinks(){
const request = require('request');
const Promise = require('bluebird');
const rp = require('request-promise');
return $$('a').then(function(elems){
return Promise.map(elems, elem => {
return elem.getAttribute("href").then(function(url){
if(url){
var options = {
method: 'GET',
uri: url,
resolveWithFullResponse: true
};
return rp(options).then(function(response){
console.log('The response code for ' + url + ' is ' + response.statusCode);
return response.statusCode === 200;
});
}
});
}).then((allCodes) => {
console.log(allCodes);
return Promise.resolve(allCodes);
});
});
}
测试
it("should not have broken links", function(){
expect(pageObject.crawlLinks()).not.toContain(false);
});
404错误出现在浏览器控制台中(至少在chrome中是这样),您可以从量角器访问该错误
browser.manage().logs().get('browser').then(function(browserLogs) {
browserLogs.forEach(function(log){
expect(log).toBeFalsy();
});
});
上面的代码将导致所有控制台消息被视为测试失败,您可以根据需要对其进行调整。您可以在所有测试的中放置类似的代码。问题是特定于javascript/量角器的。我得到错误->类型错误:无法读取请求时未定义的属性“statusCode”。\u回调该建议告诉我你有一个错误
。你能打印错误吗?在我看来,承诺
或蓝鸟
的使用是过时的。这不是直接在量角器5.x中解决的吗?我在量角器5.x发布之前回答了这个问题,所以是的,非常过时。