前言:这段时间还算比较空闲,我准备把过去作过的有些形形色色,甚至有些奇怪的研究总结一下,也许恰好有人用的着也不必定,不枉为之抓耳挠腮的时光和浪费的电力。php
名词解释:html
网站可访问性测试:国内基本没有什么开展,简单又不太科学地说,就是让盲人,色弱,聋哑人也能够访问的网站。网站只有符合不少的编码和布局标准,屏幕阅读器才能很好地帮助残疾人访问这个网站。在美国,可访问性是立法了的,政府或者政府资助的网站,必须符合必定的可访问性标准,即所谓的508 section。web
AChecker:一个php的,开源的,在线可访问性检查工具。和全部其余的在线可访问性检查工具同样,它没办法检查须要登陆的页面。可是好在它开源,咱们能够修改它的源代码来达到目的,这就是本文的主旨.cookie
AChecker源码能够从这里获取:http://www.atutor.ca/achecker/download.phpsession
部署Acheckerdom
首先的首先,你须要下载AChecker的源码进行部署,这个就不具体讲了,我是部署在WampServer上的,地址是localhost:8080ide
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文件中就能看到测试结果了。