よくある質問
Android
モバイルアナライザー
なぜアプリは追加の権限が必要なのですか?
アプリケーションを初めてセットアップする際に、Axe DevTools Mobile Analyzerにオーバーレイ描画とアクセシビリティ設定の許可をするよう求められます。オーバーレイ描画の許可により、どのアプリをデバイスで開いていてもフローティングアクションボタンが付いてくることができます。アクセシビリティ設定の許可により、スキャンを試みているアプリケーション内のビュー情報にアクセスすることができます。
自動化テスト
認証なしで自動テストを設定できますか?
Axe DevTools Mobileサービスへのネットワークリクエストを必要としないオフラインのSDKおよびAppiumドライバーのビルドを、オートメーションパイプライン用に提供しています。このため、これらのビルド設定はDequeのArtifactoryを通じてのみ利用可能です。
このビルドはAndroid用axeDevTools Mobileの機能のサブセットであることに注意してください。ダッシュボードへの結果のプッシュを含む完全な機能セットを使用するには、標準のSDKまたはAppiumドライバーをご利用ください。初めての手引きを参照してください。
セットアップ
ドキュメントをナビゲートする際、サーバーとのやりとりが必要なすべての機能がオフラインビルドで利用可能ではないことに注意してください。
テストのセットアップ
アプリケーションのbuild.gradleファイルに次を追加します:
android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/AL2.0'
exclude 'META-INF/LGPL2.1'
}
}AndroidManifest.xmlにインターネットの許可があることを確認してください:
<uses-permission android:name="android.permission.INTERNET" />Espressoテストの例
axe.loginWithUsername(...)とaxe.loginWithApiKey(...)はこのバージョンのライブラリには含まれておらず、認証版の使用から変換する場合はセットアップコードから削除する必要があります。
レイアウト非依存
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Rule
@JvmField
var rule: ActivityScenarioRule<MainActivity> = ActivityScenarioRule(MainActivity::class.java)
companion object {
private val axe = AxeDevTools()
init {
axe.setOfflineLicenseKey("deque_provided_license_key_here")
}
axe.setInstrumenation(InstrumentationRegistry.getInstrumentation())
}
@Test
fun exampleTest() {
onView(withText("Example Button Name")).perform(click())
}
@After
fun runAccessibilityScan() {
val scan = axe.scan()
val result = scan?.getSerializedResult()
axe.tearDown()
}
}結果
なぜ結果がDeveloper Hubに表示されないのですか?
Developer Hubに結果が表示されない場合は、次のことを確認してください:
- テストでAxeライブラリを初期化する際に有効なAxe DevTools Mobile APIキーを提供するを行います。APIキーを見つけるにはAxeアカウント設定を訪れるか、新しいAxe DevTools Mobile APIキーを生成するを行います。
- APIキーとともに有効なプロジェクトIDを提供するをテストセッションを開始するときに使用します。テストセッションを開始するのにプロジェクトIDは必要ありませんが、Developer Hubに結果を送信するにはそれが必須です必要です。結果のためのプロジェクトを作成するすると、プロジェクトIDが自動的に生成されます。
- 各スキャンの後に
uploadToDashboard関数を呼び出しますを実行して結果をDeveloper Hubに送信します。 - 完全な例を参照する。Androidサンプルテストクラスを参照し、実装と比較してください。
Looking for your Project ID? You can access this from the main Projects page in Axe Developer Hub.
- Go to 'Settings' for your project and select 'Configure Project'.
- In the 'Project Details' you can find and copy the Project ID.
- Make sure you have provided this Project ID to the
startScanSessionmethod.
iOS
モバイルアナライザー
Apple開発証明書が期限切れの場合、どうすればよいですか?
モバイルアナライザーデスクトップアプリを使用中にApple開発証明書が期限切れであると表示された場合、以下の手順に従ってください。
クイック修正
- Xcodeを開く → 「Xcode」 > 設定(または古いバージョンでは環境設定)に移動
- アカウントタブを選択します
- Apple IDを選択します
- 証明書を管理をクリックします
- 期限切れの証明書を見つけます(警告アイコンが表示されます)
- 期限切れの証明書を選択し、マイナス(−)ボタンをクリックして削除します
- プラス(+)ボタンをクリックし、Apple Developmentを選択して新しい証明書を作成します
- モバイルアナライザーアプリを閉じて
- アプリを再起動します。必要に応じてiOSアプリのアクセシビリティテストを参照してください。
それでもエラーが発生しますか?
Xcodeが古い証明書をキャッシュすることがあります。次のことを試してください:
- Apple Developerアカウントで証明書を取り消します:
- developer.apple.comにアクセスします
- 「証明書、識別子、プロファイル」へナビゲートします
- 期限切れの証明書を見つけて無効にしてください
- Xcode に戻り、上記の手順を繰り返して新しいものを作成します
- 派生データをクリアするには:
- 「Xcode」: 「ウィンドウ」 > 「オーガナイザ」 > 「プロジェクト」タブ
- プロジェクトを選択し、「削除」を「派生データ」の隣でクリックします
- これらの変更を行った後に Xcode を再起動します
デバイスが自動的に登録されなかった場合はどうすればよいですか?
Apple 開発者アカウントで電話を手動で登録するには、Apple Developer ポータルを通じてテストデバイスとして追加する必要があります。方法は次のとおりです:
- デバイスの UDID(ユニークデバイス識別子)を取得します:
- iPhone を Mac に接続します
- 「Finder」(macOS Catalina以降)または「iTunes」(古いバージョン)を開きます
- デバイスを選択し、シリアル番号をクリックして UDID が表示されるまでクリックします
- 右クリックして UDID をコピーします
- あるいは、「Xcode」: 「ウィンドウ」 > 「デバイスとシミュレータ」を開き、デバイスを選択し、識別子をコピーします
- デバイスを開発者アカウントに追加:
- developer.apple.comに進んでサインインします
- 「証明書、識別子、プロファイル」へナビゲートします
- サイドバーから「デバイス」を選択します
- 新しいデバイスを登録するためにプラス(+)ボタンをクリックします
- デバイスの名前を入力して UDID を貼り付けます
- 続行をクリックし、その後登録
- モバイルアナライザーを再起動します:
- モバイルアナライザーアプリを閉じて
- アプリを再起動します。必要に応じてiOSアプリのアクセシビリティテストを参照してください。
無料のApple Developerアカウントでは最大で3台のデバイスを登録でき、有料アカウントではデバイスの種類ごとに最大100台(100台のiPhone、100台のiPadなど)を登録できます。
自動化テスト
バンドル識別子とは何ですか?
バンドル識別子とは、Appleのエコシステム内でアプリケーションを識別するための一意の識別子です。同一の識別子を持つアプリケーションは2つと存在できません。これにはベータビルドやアプリケーションの他のバリエーションも含まれます。Axe DevTools Mobileはテスト対象アプリケーションのビューのアクセシビリティ情報を接続してクエリするためにバンドル識別子を使用します。
App Storeからアプリをテストする必要がありますか?私たちはバンドル識別子を取得できます。WebブラウザからアプリケーションのApp Storeリストを検索し、それを使用してアプリのバンドルIDを見つけてくださいします。
インストールされたランナーアプリケーションがアクセスできる内容は?
セットアップ手順でバンドル識別子を追加して通信するよう指定したアプリケーションのみです。Appleはセキュリティに非常に優れており、インストール方法(Testflight、Xcode、またはApp Store)に関係なくインストールされている各アプリにサンドボックス環境を使用しています。アナライザーアプリケーションは、Xcode/Appleのエコシステムに組み込まれているUIテスト機能を利用しています。これはセットアップファイルで指定したバンドル識別子を通じてアプリケーションと通信するためのブラックボックスコミュニケーションです。
一般的なエラーと対処法
テスト中にエラー/テスト失敗が発生した場合、このセクションでは一般的なエラーメッセージとその解決策を示します。ひし形の赤い「×」アイコンを選択すると、Xcodeが左側の「問題ナビゲータ」パネルを開き、特定のエラーメッセージを強調表示します。
-
Cannot request screenshot data because it does not exist: これは初めての実行で発生する可能性が高いエラーメッセージです。テストを再度実行して解決するか確認してください。このエラーが二度目に表示された場合は、正しいバンドル識別子が設定されていること、およびテストするアプリケーションが選択したシミュレータ/デバイスで開かれていることを確認してください。 -
caught error: “couldNotVerifyUser”: Dequeへのログインに失敗しました。設定ファイルにAPIキーが追加され、Axe DevTools Mobileに対して有効であることをAxeアカウント設定を訪れて確認してください。
認証なしで自動テストを設定できますか?
Axe DevTools Mobileサービスへのネットワークリクエストを必要としないオフラインのSDKおよびAppiumドライバーのビルドを、オートメーションパイプライン用に提供しています。このため、これらのビルド設定はDequeのArtifactoryを通じてのみ利用可能です。
このビルドはaxeDevToolsXCUIの機能のサブセットであることに注意してください。ダッシュボードへの結果のプッシュを含む完全な機能セットを使用するには、axeDevToolsXCUIフレームワークをご利用ください。セットアップガイドを参照してください。
セットアップ
- アクセシビリティテストに使用する任意のファイルにフレームワークをインポートします。
import axeDevToolsXCUI_noauth- テストクラス内にAxe DevToolsインスタンスを保持するためのオブジェクトを作成します:
var axeDevTools: AxeDevTools?setUpまたはsetUpWithErrorメソッド内でフレームワークを初期化します。
axeDevTools = AxeDevTools.startScanSession()フルセットアップ例
import axeDevToolsXCUI_noauth
import XCTest
class MyUITests: XCTestCase {
var axeDevTools: AxeDevTools?
override func setUpWithError() throws {
axeDevTools = AxeDevTools.loginWithLicenseKey("deque_provided_license_key_here") // does this change??
}
...
}UIテスト
テストを開始するには、任意のXCUIElementをフレームワークに渡し、それに対しておよびその子にアクセスビリティテストを実行します。
let result = try axeDevTools.run(onElement: XCUIApplication())完全な例
import XCTest
import axeDevToolsXCUI_noauth
final class XCUI_noAuthUITest: XCTestCase {
var axeDevTools: AxeDevTools = AxeDevTools.startScanSession()
override func setUpWithError() throws {
continueAfterFailure = false
}
func testExample() throws {
let app = XCUIApplication()
app.launch()
let result = try axeDevTools.run(onElement: app)
// Do something with the result
}
}次のステップ
データとツールを提供し、チームに役立つCI/CDワークフローを作成する手助けをします。以下のような結果オブジェクトを利用するためのいくつかの提案があります:
- 障害が見つかった場合は、ビルドに失敗させます。すでにアクセシビリティ問題が解消された画面がある場合、新たな問題が開発ライフサイクル中に生じないように、数が0であることを確認し、そうでなければプルリクエストステータスチェックを失敗させるようにすることができます。
// Add an assertion to fail the build if issues were found
XCTAssertTrue(result.failures.count > 0)- ローカルに結果を保存を使用して、ブランチ内で見つかった問題の範囲指定レポートを作成します。CICDパイプライン用Reporter CLIと共にレポートを作成することをチェックアウトしてください。これは、リリース候補またはベータブランチで、支援技術を使用する顧客が直面する可能性のある障害についての認識を高めるのに非常に役立ちます。
結果
なぜ結果がDeveloper Hubに表示されないのですか?
Developer Hubに結果が表示されない場合は、次のことを確認してください:
- テストでAxeフレームワークを初期化する際に有効なAxe DevTools Mobile APIキーを提供するを行います。APIキーを見つけるにはAxeアカウント設定を訪れるか、新しいAxe DevTools Mobile APIキーを生成するを行います。
- APIキーとともに有効なプロジェクトIDを提供するをテストセッションを開始するときに使用します。テストセッションを開始するのにプロジェクトIDは必要ありませんが、Developer Hubに結果を送信するにはそれが必須です必要です。結果のためのプロジェクトを作成するすると、プロジェクトIDが自動的に生成されます。
- 各スキャンの後に
postResult関数を呼び出しますを実行して結果をDeveloper Hubに送信します。 - 完全な例を参照する。iOSサンプルテストクラスを参照し、実装と比較してください。
プロジェクトIDを探していますか?Axe Developer Hubのメインプロジェクトページからアクセスできます。 Axe Developer Hubから。
- プロジェクトの「設定」に移動し、「プロジェクト設定」を選択してください。
- 「プロジェクトの詳細」でプロジェクトIDを見つけてコピーできます。
- このプロジェクトIDを
startScanSessionメソッドに提供してください。
Appium
自動化テスト
認証なしで自動テストを設定できますか?
Dequeから提供されたライセンスキーを使用して、Appiumオフラインドライバでスキャンを実行できます。これは、クラウドプロバイダーとの連携時や、Axe DevTools Mobileサービスへのネットワークリクエストを作成せずにスキャンを実行する必要がある場合に便利です。
インストール
You can install the Appium offline drivers using a private npm package from Deque's Artifactory:
Android
appium driver install --source=npm @axe-devtools/axe-appium-uiautomator2-driver-offlineiOS
appium driver install --source=npm @axe-devtools/axe-appium-xcuitest-driver-offlineあるいは、Agoraから直接ダウンロードしてローカルにインストールすることもできます。詳細についてはプライベートクラウドとオンプレミスのセットアップに関する我々のドキュメントを参照してください。
ライセンスキー
Dequeからライセンスキーを取得し、このオフライン版のAppiumドライバーを利用する必要があります。リクエストをhelpdesk@deque.comまたはsupport.deque.comに送信してください。
ライセンスキーは文字列フォーマットで、以下のように見えるはずです:
eyJjb21wYW55TmFtZSI6Ik1vYmlsZSBUZWFtIiwiZXhwaXJlcyI6MTcyMzk5NDk1MDY2NX0=.+aHokyifCnw6peuAmAq75IGrTjVSpkRhhfBWnf92Hp0WV3FF5Qph/KFNr7ALzi6/3K7BcSMKnelqtnwrd6mMkQ==
このライセンスキーをセキュリティのために環境変数に追加することを強くお勧めします。
オフラインスキャン
スキャンを実行するには、ライセンスキーがaxeSettingsに含まれていることを確認してください。
const axeSettings = {
'licenseKey': 'YOUR_LICENSE_KEY_HERE'
};
const result = await driver.execute('mobile: axeScan', axeSettings);axeSettingsには、次のオプションプロパティが利用可能です:
ignoreRules(デフォルト:[])ignoreExperimental(デフォルト:false)
以下は、JavaScriptのMochaテストフレームワークを使用したAppiumドライバによるオフラインスキャンの完全な例です。
Android
const { remote } = require('webdriverio');
const assert = require('assert');
describe('AxeScan', () => {
let driver;
let axeSettings;
before(async () => {
axeSettings = {
// Your license key has been stored in an environment variable for security
licenseKey: process.env.AXE_LICENSE_KEY
};
driver = await remote({
hostname: 'localhost',
port: 4723,
capabilities: {
platformName: 'Android',
'appium:automationName': 'AxeUiAutomator2',
'appium:deviceName': 'Android',
'appium:appPackage': 'com.android.settings',
'appium:appActivity': '.Settings',
},
logLevel: 'silent'
});
});
after(async () => {
await driver.deleteSession();
});
it('scan settings screen', async () => {
// run accessibility scan
const result = await driver.execute('mobile: axeScan', axeSettings);
// ensure no errors were encountered during the scan
if (result.axeError) {
assert.fail(`AxeScan failed with error: ${result.axeError}`);
}
const failCount = result.axeRuleResults.filter(rule => rule.status === 'FAIL').length;
// assert that there are no accessibility violations
assert.strictEqual(failCount, 0);
});
});iOS
const { remote } = require('webdriverio');
const assert = require('assert');
describe('AxeScan', () => {
let driver;
let axeSettings;
before(async () => {
axeSettings = {
// Your license key has been stored in an environment variable for security
licenseKey: process.env.AXE_LICENSE_KEY
};
driver = await remote({
hostname: 'localhost',
port: 4723,
capabilities: {
platformName: 'iOS',
'appium:automationName': 'AxeXCUITest',
'appium:bundleId': 'com.apple.Maps',
'appium:udid': '...', // xcrun simctl list | grep Booted
},
logLevel: 'silent'
});
});
after(async () => {
await driver.deleteSession();
});
it('scan settings screen', async () => {
// run accessibility scan
const result = await driver.execute('mobile: axeScan', axeSettings);
// ensure no errors were encountered during the scan
if (result.axeError) {
assert.fail(`AxeScan failed with error: ${result.axeError}`);
}
const failCount = result.axeRuleResults.filter(rule => rule.status === 'FAIL').length;
// assert that there are no accessibility violations
assert.strictEqual(failCount, 0);
});
});結果
なぜ結果がDeveloper Hubに表示されないのですか?
Developer Hubに結果が表示されない場合は、次のことを確認してください:
- テストセッションを開始し、スキャンを開始する際に、有効なAxe DevTools Mobile APIキーが提供されていることを確認してください。APIキーを見つけるにはAxeアカウント設定を訪問するか新しいAxe DevTools Mobile APIキーを生成するしてください。
- テストセッションを開始するときに、有効なプロジェクトIDとAPIキーが提供されていることを確認してください。テストセッションを開始するためにプロジェクトIDは必要ありませんが、Developer Hubに結果を送信するには必須です必要です。結果のためのプロジェクトを作成する際、プロジェクトIDは自動的に生成されます。
- Appium向けAxe DevTools Mobileの完全な自動化例を参照とあなたの実装を比較してください。
プロジェクトIDをお探しですか?Axe Developer Hubのメインプロジェクトページからアクセスできます。
- プロジェクトの「設定」に移動し、「プロジェクト設定」を選択してください。
- 「プロジェクトの詳細」でプロジェクトIDを見つけてコピーできます。
- このプロジェクトIDを
axeStartSessionメソッドに提供してください。
