在 bUnit 测试时,如何从 AngleSharp.Dom.INode 访问输入元素 ID 或名称?

How can I access an input elements id or name from an AngleSharp.Dom.INode while bUnit testing?

我正在尝试使用 bUnit 测试我们的 Blazor 项目,但遇到了 bUnit 问题 Assert

这是我要测试的组件:

<div>
foreach(KeyValuePair<String, String> entry in Dictionary<String, String>)
{
    <div class="form-check">
        <input class="form-check-input" type="radio" name="myAwesomeName-@ChosenDocument.docId" id="myAwesomeName@ChosenDocument.docId-@entry.Key" checked=@(firstOptionEnabled) @onclick="() => doSomethingAwesome = entry.Key">
        <label class="form-check-label" for="myAwesomeName-@ChosenDocument.docId-@entry.Key"> @entry.Value </label>
    </div>
    firstOptionEnabled = false;
}
</div>
@code
{
    [Parameter]
    public Document ChosenDocument { get; set; }
}

我写的测试是这样的:

[Fact]
public async void MyTest()
{
    var cut = RenderComponent<MyComponent ChosenDocument="documentToTest">();
    IRefreshableElementCollection<IElement> allElements = cut.FindAll("div [class=\"form-check\"]");
    // These are the <div class="form-check"> elements
    foreach(IElement element in allElements)
    {
        // These are the <input> elements
        foreach(INode node in element.ChildNodes)
        {
            // Here, I want to assert on data within each of these `INode` 
        }
    }
}

我想执行的 Assert 出现了问题。

我想声明每个 input 元素的 idname,如下所示:

Assert.Equal(("myAwesomeName-" + ChosenDocument.docId), <something here ...>);

其中 <something here ...>input 元素的 idname。但是,我似乎无法从被测组件中获取 idname

当我调试测试并查看“本地”window 时,我可以看到:

- node {AngleSharp.Html.Dom.HtmlInputElement}   AngleSharp.Dom.INode {AngleSharp.Html.Dom.HtmlInputElement}
    // ...
    Id      "myAwesomeName-1234567890-text"    string
    // ...
    Name    "myAwesomeName-1234567890"         string
    // ...

所以,看起来这两条信息应该在我的 Assert 中可供我使用,但它们不是;好吧,至少对我来说不是很明显。

如何访问我的 Assertion 所需的那两条数据?

这样的东西行得通吗?你应该可以直接抓取所有的输入元素:

var inputs = cut.FindAll(".form-check-input");
foreach (var input in inputs)
{
    Assert.Equal($"myAwesomeName-{ChosenDocument.docId}", input.GetAttribute("name"));
}

或者更简洁:

var inputs = cut.FindAll(".form-check-input");
Assert.All(inputs, i => Assert.Equal($"myAwesomeName-{ChosenDocument.docId}", i.GetAttribute("name")));