前言:这段时间还算比较空闲,我准备把过去做过的有些形形色色,甚至有些奇怪的研究总结一下,也许刚好有人用的着也不一定,不枉为之抓耳挠腮的时光和浪费的电力。

 

名词解释:

网站可访问性测试:国内基本没有什么开展,简单又不太科学地说,就是让盲人,色弱,聋哑人也可以访问的网站。网站只有符合很多的编码和布局标准,屏幕阅读器才能很好地帮助残疾人访问这个网站。在美国,可访问性是立法了的,政府或者政府资助的网站,必须符合一定的可访问性标准,即所谓的508 section。

AChecker:一个php的,开源的,在线可访问性检查工具。和所有其他的在线可访问性检查工具一样,它没办法检查需要登录的页面。但是好在它开源,我们可以修改它的源代码来达到目的,这就是本文的主旨.

AChecker源码可以从这里获取:http://www.atutor.ca/achecker/download.php

 

部署Achecker

首先的首先,你需要下载AChecker的源码进行部署,这个就不具体讲了,我是部署在WampServer上的,地址是localhost:8080

 

1,首先,我们需要用Selenium2来对你需要测试的网站进行登录(这一步的代码就省略了),然后获取登录后页面的cookie

//这里省略登录操作代码若干行
//... String url = "the_page_url_which_can_access_after_login";
String cookie = ExtractCookie(url);
public String ExtractCookie(String url)
{
//get the cookie which contains login information
string cookie = "Cookie: ";
foreach (OpenQA.Selenium.Cookie c in driver.Manage().Cookies.AllCookies)
{
if (url.Contains(c.Domain))
{
cookie += c.Name + "=" + c.Value + "; ";
}
}
// cookie += "domain=limeade.info; expires=Sun, 10-Jan-2016 08:43:06 GMT; path=/";
return cookie;
}

 

2, 对AChecker源代码修改。我们需要对AChecker提供的RESTful Api进行一些修改,增加一个参数,用于传递cookie。找到checkacc.php文件,做如下修改(粗体标出)

//前面省略N行
// 。。。 $uri = trim(urldecode($_REQUEST['uri']));
$web_service_id = trim($_REQUEST['id']);
$guide = trim(strtolower($_REQUEST['guide']));
$output = trim(strtolower($_REQUEST['output']));
$offset = intval($_REQUEST['offset']);
$cookie = trim(urldecode($_REQUEST['cookie'])); // initialize defaults for the ones not set or not set right but with default values
if ($output <> 'html' && $output <> 'rest')
$output = DEFAULT_WEB_SERVICE_OUTPUT;
// end of initialization // validate parameters
if ($uri == '')
{
$errors[] = 'AC_ERROR_EMPTY_URI';
}
else
{
if (Utility::getValidURI($uri) === false) $errors[] = 'AC_ERROR_INVALID_URI';
} if ($web_service_id == '')
{
$errors[] = 'AC_ERROR_EMPTY_WEB_SERVICE_ID';
}
else
{ // validate web service id
$usersDAO = new UsersDAO();
$user_row = $usersDAO->getUserByWebServiceID($web_service_id); if (!$user_row) $errors[] = 'AC_ERROR_INVALID_WEB_SERVICE_ID'; $user_id = $user_row['user_id'];
} // return errors
if (is_array($errors))
{
if ($output == 'rest') {
header('Content-type: text/xml');
echo RESTWebServiceOutput::generateErrorRpt($errors);
} else {
echo HTMLRpt::generateErrorRpt($errors);
} exit;
} // generate guidelines
$guides = explode(',',$guide); $guidelinesDAO = new GuidelinesDAO();
foreach ($guides as $abbr)
{
if ($abbr == '') continue; $row = $guidelinesDAO->getEnabledGuidelinesByAbbr($abbr); if ($row[0]['guideline_id'] <> '') $gids[] = $row[0]['guideline_id'];
} // set to default guideline if no input guidelines
if (!is_array($gids)) $gids[] = DEFAULT_GUIDELINE; // retrieve user link ID
$userLinksDAO = new UserLinksDAO();
$user_link_id = $userLinksDAO->getUserLinkID($user_id, $uri, $gids); // set new session id
$userLinksDAO->setLastSessionID($user_link_id, Utility::getSessionID()); // validating uri content
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>$cookie
)
);
$context = @stream_context_create($opts);
$validate_content = @file_get_contents($uri, false, $context); if (isset($validate_content)) //后面省略N行
// 。。。

 

3,调用修改后的API,去请求一个需要登录的网页,进行可访问性测试 --

//request string
string request = "http://localhost:8080/checkacc.php" +
"?uri=" + HttpUtility.UrlEncode(url) +
"&id=" + HttpUtility.UrlEncode("3ed23fc9d02d24fe4aa72cf63202076dae7a12fd") +
"&output=html" +
"&guide=" + "508,WCAG2-AA" +
"&cookie=" + HttpUtility.UrlEncode(cookie); HttpWebRequest req = (HttpWebRequest)WebRequest.Create(request);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(resp.GetResponseStream());
String html = reader.ReadToEnd();

这里稍微解释一下RESTful API中各个参数

uri : 就是你要进行可访问性测试的页面

id : web service服务id,需要在你自己部署的AChecker上注册一个用户,然后在profile页面就会给你一个id

output:测试结果的返回方式,html或者xml

guide:根据哪个标准进行测试,这里选了508和WCAG2-AA这2个可访问性标准。

cookie:就是我们自己加的参数。

 

最后结果放在了String html中,把它保存到.htm文件中就能看到测试结果了。

AChecker + Selenium2对需要登录的页面进行自动化可访问性测试的更多相关文章

  1. 登录注册页面html模版

    登录注册页面html模版 地址:http://download.csdn.net/detail/xiaosongaixiaoqian/5432033

  2. SpringSecurity兑现多登录成功页面和登录成功返回被拦截界面

    SpringSecurity实现多登录成功页面和登录成功返回被拦截界面 使用SrpingSceurity作为认证和授权的安全框架可以省下很多基础工作. 具体可以参考SpringSecurity,这里不 ...

  3. /*用户登录注册页面输入框的设置*/<span>的使用

    <!DOCTYPE html> /*用户登录注册页面输入框的设置*/ <html lang="en"> <head> <meta char ...

  4. Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案

    Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案   by:授客 QQ:1033553122   开发环境   Win 10   Vue 2.9.6   node-v ...

  5. Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_134 今天有同学提出了一个需求,老板让自动登录这个页面:https://www.dianxiaomi.com/index.htm, ...

  6. servlet技术--使用注解模拟用户登录实现页面跳转

    文章目录 1.servlet体系结构 2.servlet技术特点 3.servlet和jsp的区别 4.servlet开发 1.servlet体系结构 servlet实质就是按servlet规范编写的 ...

  7. vue的登陆验证及返回登录前页面实现

    一.路由配置部分如下所示, 导出路由示例 let router = new VueRouter({ routes: [ // 登陆 { name: 'login', path: '/login', c ...

  8. selenium数据驱动模式实现163邮箱的登录及添加联系人自动化操作

    项目结构如下: 要求python3.0 selenium3.0 下面是代码: appModubles:addContactPersonActtion.py和LoginAction.py addCont ...

  9. windows下使用远程工具登录虚拟机上的Linux、访问虚拟机上的服务 、端口转发、win7 telnet登陆虚拟机

    首先要清楚virtual box如何设置端口转发: 一篇文章: 如何使用VirtualBox进行端口转发 由于默认的方式是用NAT来做虚拟机网络的,因此如果从外网想访问虚拟机的应用会比较麻烦.以前一直 ...

随机推荐

  1. django--forms

    forms模块的功能 1 表单提交验证 2 生成HTML标签 其他 提交后保留页面数据 创建forms类 首先从django中引入forms,一般会在application中新建一个文件专门保存for ...

  2. 完全使用接口方式调用WCF 服务

    客户端调用WCF服务可以通过添加服务引用的方式添加,这种方式使用起来比较简单,适合小项目使用.服务端与服务端的耦合较深,而且添加服务引用的方式生成一大堆臃肿的文件.本例探讨一种使用接口的方式使用WCF ...

  3. Windbg调试命令详解

    作者:张佩][原文:http://www.yiiyee.cn/Blog] 1. 概述 用户成功安装微软Windows调试工具集后,能够在安装目录下发现四个调试器程序,分别是:cdb.exe.ntsd. ...

  4. 利用pip安装模块(以安装pyperclip为例)

    >任务:利用pip安装pyperclip模块 >前提:你已经在你的电脑里面安装啦Python2.7的Windows版本,并且已经配置了环境变量 >实现步骤 >>打开你的P ...

  5. python 3.5 关于sys问题总结

    想把自己写的模组直接调用的时候,使用这个sys.path.append(): 但是总是报错(图1): 解决方案,去掉前面的from public; 解决思路: 1.sys.path.append(&q ...

  6. 利用Socket远程发送文件

    思想: 1.注意使用两个通道,一个普通对象通信通道,另一个纯净的文件字节流通道 2.利用通信通道发送文件请求,新建字节流通道,开始发送文件

  7. Linux 安装记录

    ######ubuntu-16.04.1-desktop-amd64 ||| Unity desktop Environment, NOT !!! ######deepin-15.3-amd64.is ...

  8. 怎样设置才能允许外网访问MySQL

    1.将本地数据库的user表的第一条记录的host数据改为%,或者用update user set host='%' where user='root'; 2.用MySQL的命令行客户端操作如下步骤: ...

  9. (一)GPIO 编程实验 LED 流水灯控制

    7个寄存器 是R1-R16.(当然,里面有很多是分几个模式的,所以总共有37个)类似于单片机的R0-R7. GPXCON,GPXDAT等等是另外的寄存器,应该叫,特殊功能寄存器,类似于单片机的P0,P ...

  10. Java 获取两个日期之间的日期

    1.前期需求,两个日期,我们叫他startDate和endDate,然后获取到两个日期之间的日期 /** * 获取两个日期之间的日期 * @param start 开始日期 * @param end ...