私は、XCode 7のXCTest UIテスト機能を使用してツリーウォーカーを作成しようとしています。これは、テーブルビューの確定的なツリーを特定の深度まで体系的に調べています。特定の要素のタップが実際に新しい画面への遷移を引き起こしたかどうかを確実に検出することができないことを除いて、ほとんど機能します。私は、ナビゲーションバーのラベルが変更されたか、またはメニュー要素の数が変更されたかを検出するための、ほとんどの場合に機能するハッキリメソッドを持っています。XCode UIテストで画面が変更されたことをどのように検出できますか?
連続した画面に同じナビゲーションバーラベル(私が歩いているコードベースは私のものではない)があるため、最初のテストでは偽陰性が発生します。 2番目のテストでは誤検出があります。これは、表要素をクリックしても別の表/画面に移行しないで、現在の画面に余分な要素が追加されることがあるためです。
読書をした後、アクセシビリティラベルを使用すると、やり遂げる方法があるようです。そこで、navDのアクセシビリティラベルのUIDをアプリケーションコード(viewDidAppear内)に設定し、UIテストコードでテストします。これはうまくいくはずですが、テストコードにはというゼロという値しか戻っていません。
私はUIテストに関してノーベルであり、私が何をしているのかをはっきりと理解することなく、他の人のコードを主にカット/ペースト/アダプテーションしていると自由に告白します。だから、アクセシビリティ・ラベル・コードそのものに、おそらく画面が変化したことを検出するための概念的なレベルで、おそらく何らかの素朴な災難を起こしているのです。たぶん私がやっていることができるもっと単純な/より慣用的なものがあるかもしれません。 XCTest UI試験において
- (void)viewDidAppear: (BOOL)animated {
[super viewDidAppear: animated];
//...
UINavigationBar* navBar = self.navigationController.navigationBar;
if(navBar)
{
static NSInteger s_UID = 0;
navBar.topItem.accessibilityLabel = [NSString stringWithFormat:@"UID-%ld", s_UID++];
}
}
:アプリケーションにおいて
firstElemが発見され、そしてIは、例えば抽出することができる午前こと
- (NSString*) navBarAccessibilityLabel: (XCUIApplication*) app
{
NSString* result = NULL;
XCUIElementQuery *navBars = app.navigationBars;
XCUIElement* firstElem = [navBars.staticTexts elementBoundByIndex:0];
if(firstElem)
{
result = (NSString*)firstElem.accessibilityLabel; // This is always nil
}
return result;
}
注firstElem.labelこれはとても幸いです。
助けてください。
#ifdef UITESTING
- (void) viewDidAppear: animated
{
[super viewDidAppear: animated];
// do your checking here
}
#endif
をプロジェクトのテストターゲットでは、ビルド設定の下にあり:
で素晴らしい記事を見つけることができますか? @カイトン? –