2017-05-27 3 views
1

アサーションが生成されずに動作するようにUIPickerViewを含むビューコントローラのXCUITestを取得できない状況に遭遇しました。アサーションの原因となる問題は、XCUITestで使用されるアクセシビリティ機能によって、ピッカー値のそれぞれに偽の「1のn」が追加されていることが明らかです。この1行のような単純なadjustToPickerWheelValueを使用したXCUITest:&& viewForRow:デリゲートの結果がアサーション

何かがテスト

[app.pickers.pickerWheels.element adjustToPickerWheelValue:@"ANYVALUE"]; 

の間に主張するだろう。これはまさに私の問題だったCannot use UI Testing to adjust pickerView which uses a view-based delegate

をこれはXcodeの持つ既知のバグであることが判明し、オープンレーダーがあります私はviewForRow:delegateを使用して、ピッカー値で属性付きの文字列を使用します。代わりに、titleForRow:delegateを使用しても問題は発生しません。

私はアクセシビリティ情報を手動で設定することでこれを回避しようとしましたが、役に立たないものです。

私はtitleForRow:delegateの使用を検討することはできません。

しかし、ジレンマは、他のクライアントの要件としてすべてのビューの完全なXCUITestを配信することもできます。

実行可能な回避策はありますか?

答えて

0

これはXcodeで既知のバグがあり、それが戻って、少なくともこの2015 Apple Developer Forum Post

ありません修正するつもりは明らかに来て、今かなりの時間のために開かれています。

すべてのクライアントの要件を満たすための私のソリューションは、 "Debug"から複製された "Testing"という追加のビルド構成を作成し、新しいプリプロセッサマクロXCUITESTを定義できるようにすることでした。次に、DEBUGまたはRELEASEの代わりに、この新しいビルド構成を使用するためのテストでスキームを編集します。私はXCのテストのために働くデリゲートを組み込み、まだそのようなクライアントアプリケーションの要件を満たしているものを保つことができる。この変更に伴い

#ifndef XCUITEST // for release or debug we use this method as we want attributed text strings 
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 

// blah blah 

} 
#endif 

#ifdef XCUITEST // for testing we have to use this method so XCUITests will work with adjustToPickerWheelValue: 
- (UIView *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 

// blah blah 

} 
#endif 
関連する問題