使用 I.Expect.Text 和 fluentautomation

Using I.Expect.Text with fluentautomation

I.Expect.Text("sometext") 是否需要具有指定选择器的 In 方法?

我问,因为我继承的一些测试没有附加 In 方法,而且我们的测试通过了,即使我知道提供的文本不存在在页面上。

我已经查看了文档,重新 http://fluent.stirno.com/docs/#asserts-text - 似乎(无论如何对我来说)不清楚 In 选择器必须存在。我假设它需要存在。

我想我想问的是,如果确实需要附加 In 方法才能使断言正常工作,我将如何流利地陈述 "sometext" 出现在页面上的任何 div 或 p 标记或 class 中,或者我应该始终使用 ID。我在 https://github.com/stirno/FluentAutomation/issues/133.

看到有用的东西

所以像下面这样的东西可以包装到 AssertSyntaxProvider 的扩展方法中,但是它看起来 heavy-handed/clunky?

        var texts = I.Find("html").Elements.Select(el => el.Item2().Text);
        I.Assert.True(() => texts.Any(t => t.Contains("statement1")));
        I.Assert.True(() => texts.Any(t => t.Contains("statement2")));
        I.Assert.True(() => texts.Any(t => t.Contains("statement3")));

感谢帮助!!

最后一件事 - 这是一个很棒的图书馆!!!

是的,需要In作为链的执行块。自从我能够专注于扩展 FluentAutomation 以来已经有一段时间了,所以对多个元素进行断言并没有变得更好。

我确实有一个很好的计划,但我还没有时间去实施。

至于你的具体测试,你已经接近我现在使用的:

I.Open("http://fluent.stirno.com");
var elements = I.FindMultiple("*").Children.Select(x => x());
I.Assert.True(() => elements.Any(x => x.Element.Text.Contains("v3.0 Released!")));

v3.1 将有一些更好的方法来处理这个问题,但这至少使用了 Sizzle 的 * 选择器来获取每个元素(警告:可能真的很慢,所以如果可以限制,可以使用 "div,p,span" 或类似的方法它)。