Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

FriendlyでFrameを使ったアプリをテストする その2

$
0
0

blog.okazuki.jp

1つ前の記事でWPFContentControlなるものをこさえてまでやった方法ですが、Friendly作者の石川さんに聞いたらさくっともっといい方法を教えてもらえました。

AppVar型にもLogicalTreeメソッドはあるのじゃよ

個人的にWPFContentControlを作ったのはLogicalTreeメソッドとかを使いたかったからでした。AppVar型にもLogicalTree拡張メソッドがあるということを教えてもらったのでこう書けます。

var window = new WindowControl(app.Type<Application>().Current.MainWindow);
// Point1 Frameをとって、そのContentをとってAppVarに入れる
AppVar page = window.LogicalTree().ByType<Frame>().Single().Dynamic().Content;
// Point2 PageのLogicalTreeをとってごにょごにょする
var btn = new WPFButtonBase(page.LogicalTree().ByType<Button>().Single());
var txt = new WPFTextBlock(page.LogicalTree().ByType<TextBlock>().Single());
Assert.AreEqual("", txt.Text);
btn.EmulateClick();
Assert.AreEqual("Hello world", txt.Text);

VisualTreeを辿る

論理ツリーが切れてるならVisualTreeを辿ればいいじゃない?ということで、以下のような感じに書けます。

var window = new WindowControl(app.Type<Application>().Current.MainWindow);
// Point1 VisualTreeからPageをとる
var page = window.VisualTree().ByType<Page1>().Single();
// Point2 PageのLogicalTreeをとってごにょごにょする
var btn = new WPFButtonBase(page.LogicalTree().ByType<Button>().Single());
var txt = new WPFTextBlock(page.LogicalTree().ByType<TextBlock>().Single());
Assert.AreEqual("", txt.Text);
btn.EmulateClick();
Assert.AreEqual("Hello world", txt.Text);

すっきり!


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>