Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GTXiLibで小さく始めるAccessibility Testing

satoshin21
December 16, 2019

GTXiLibで小さく始めるAccessibility Testing

年末だよ Android/iOS Test Night - 2019
https://testnight.connpass.com/event/155429/

GTXiLibを使ったUI Component Testingをご紹介します。

satoshin21

December 16, 2019
Tweet

More Decks by satoshin21

Other Decks in Programming

Transcript

  1. 年末だよ Android/iOS Test Night - 2019 at. DeNA Co, Ltd.

    @satoshin21 GTXiLibで⼩さく始める Accessibility Testing
  2. whoami - @satoshin21 - eureka/Pairs -> DeNA/MOV(2019/11) - Bitrise User

    Group Meetup ‧明後⽇にBitrise User Group Meetup #3を⾏います!! ‧みんな来てね!!!
  3. google/GTXiLib import GTXiLib class ExampleTests: XCTestCase { override func setUp()

    { GTXiLib.install( on: GTXTestSuite(allTestsIn: ExampleTests.self), checks: GTXChecksCollection.allGTXChecks() , elementBlacklists: [] ) } // UIApplication.shared.windowϕʔεͷUITest func testExampleSceneWithUIApplication() { // ... } }
  4. ⾃前のGTXChecking let check = GTXiLib.check(withName: "Customized Accessibility Test") { (element,

    error: UnsafeMutablePointer<NSError?>?) -> Bool in guard let label = element as? UILabel else { return false } if label.frame.height <= 44 { error?.pointee = NSError(domain: kGTXErrorDomain, code: 999, userInfo: [ NSLocalizedDescriptionKey: "Suggest label's height is to be at least over 44.0.", kGTXErrorFailingElementKey: element ]) return false } else { return true } }
  5. 独⾃定義したUI Component public class CustomizedButton: UIButton { public override init(frame:

    CGRect) { super.init(frame: frame) self.isAccessibilityElement = true } // .. }
  6. 独⾃定義したUI Component public class CustomizedButton: UIButton { public override init(frame:

    CGRect) { super.init(frame: frame) self.isAccessibilityElement = true } // .. }
  7. 独⾃定義したUI Componentをテスト class CustomizedButtonTests: XCTestCase { func testA11y() { let

    button = CustomizedButton() button.sizeToFit() button.accessibilityFrame = button.frame let toolKit = GTXToolKit() GTXChecksCollection.allGTXChecks()?.forEach({ toolKit.registerCheck($0) }) var error: NSError? = nil let result = toolKit.checkElement(button, error: &error) // ..handling result or error } }
  8. 独⾃定義したUI Componentをテスト class CustomizedButtonTests: XCTestCase { func testA11y() { let

    button = CustomizedButton() button.sizeToFit() button.accessibilityFrame = button.frame let toolKit = GTXToolKit() GTXChecksCollection.allGTXChecks()?.forEach({ toolKit.registerCheck($0) }) var error: NSError? = nil let result = toolKit.checkElement(button, error: &error) // ..handling result or error } }
  9. 独⾃定義したUI Componentをテスト class CustomizedButtonTests: XCTestCase { func testA11y() { let

    button = CustomizedButton() button.sizeToFit() button.accessibilityFrame = button.frame let toolKit = GTXToolKit() GTXChecksCollection.allGTXChecks()?.forEach({ toolKit.registerCheck($0) }) var error: NSError? = nil let result = toolKit.checkElement(button, error: &error) // ..handling result or error } }
  10. 独⾃定義したUI Componentをテスト class CustomizedButtonTests: XCTestCase { func testA11y() { let

    button = CustomizedButton() button.sizeToFit() button.accessibilityFrame = button.frame let toolKit = GTXToolKit() GTXChecksCollection.allGTXChecks()?.forEach({ toolKit.registerCheck($0) }) var error: NSError? = nil let result = toolKit.checkElement(button, error: &error) // ..handling result or error } }
  11. UI Component Accessibility Test - `GTXiLib.check()`のように実際のプロダクトベースのテス トではないので完璧ではない ‧背景⾊が透明なUI Componentsで背景⾊によってコントラ ストが変わったり

    等 - ボタンサイズが適切か?UIButtonのtitleと背景⾊のコント ラストは適切か?など、簡易的なチェックには有効 - SwiftUIには未対応だが、GTXCheckingを作れば対応可能
  12. END