AChecker+Selenium 2ログインが必要なページの自動アクセステスト

8796 ワード

前言:この間はまだ暇なので、過去にやったことのあるいろいろな研究をまとめてみるつもりです.ちょうど誰かが使っているとは限らないかもしれません.耳をつかんで頬を掻く時間と無駄な電力を無駄にしないかもしれません.
 
名詞の解釈:
ウェブサイトのアクセス性テスト:国内ではほとんど展開されていないが、簡単で科学的には言えない.盲人、色が弱く、聴覚障害者もアクセスできるウェブサイトだ.サイトは多くのコードとレイアウトの基準に合致してこそ、スクリーンリーダーが障害者のこのサイトへのアクセスをよく助けることができる.米国では、アクセス性は立法されており、政府または政府が支援するウェブサイトは、いわゆる508 sectionという一定のアクセス性基準に合致しなければならない.
AChecker:php、オープンソース、オンラインアクセス性チェックツールです.他のすべてのオンラインアクセス性チェックツールと同様に、ログインするページをチェックすることはできません.しかし、オープンソースでは、ソースコードを修正して目的を達成することができます.これが本稿の主旨です.
ACheckerソースコードはここから入手できます.http://www.atutor.ca/achecker/download.php
 
Acheckerの配備
まずまず、ACheckerのソースコードをダウンロードして配置する必要があります.これは具体的には言いません.私はWampServerに配置しています.アドレスはlocalhost:8080です.
 
1、まず、Selenium 2でテストが必要なサイトにログインし(このステップのコードは省略します)、ログイン後のページのクッキーを取得する必要があります.
// 
//...

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をいくつか修正し、クッキーを渡すためのパラメータを追加する必要があります.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サービスidは、自分で配置したACheckerにユーザーを登録し、profileページでidを渡す必要があります.
output:テスト結果の戻り方、htmlまたはxml
guide:どの基準に基づいてテストを行いますか.ここでは508とWCAG 2-AAの2つのアクセス可能な基準が選択されています.
クッキー:私たちが自分で加えたパラメータです.
 
最後に結果をString htmlに入れて保存しました.htmlファイルにテスト結果が表示されます.