使用C#从HtmlDiv获取对象HtmlHyperLink

本文关键字:取对象 HtmlHyperLink 获取 HtmlDiv 使用 | 更新日期: 2023-09-27 18:27:29

我正在visual Studio中运行一个测试项目,该项目正在为网页运行测试步骤。

网页本身的编码很差。它有这样的东西:

<a id ="GenericButton" </a> 
<div id="UniqueID" class="ThisDiv">
    <a id ="GenericButton" </a> 
</div>

我遇到的问题是,我需要单击div"UniqueID"中的链接。我不想点击第一个网页按钮。

使用代码:

HtmlHyperlink myLink = new HtmlHyperlink(this.IE);
myLink.SearchProperties[HtmlHyperlink.PropertyNames.Id] = "GenericButton";
Mouse.Click(myLink)

将导致单击div"UniqueID"内部的第一个按钮,而不是按钮

我可以使用获取div

HtmlDiv myDiv = new HtmlDiv(this.IE);
myDiv.SearchProperties[HtmlCheckBox.PropertyNames.Class] = "ThisDiv";
myDiv.SearchProperties[HtmlCheckBox.PropertyNames.Id] = "UniqueID";
//The below line is later referenced
int myDivTag = myDiv.TagInstance;

但是我怎样才能捕捉这个div内部的a帧呢?

此外,在调试时,对象myDiv似乎没有在Visual Studio中正确设置自己,直到运行行"int myDivTag=myDiv.TagInstance;"。为什么在那之后调试器才知道我指的是哪个对象?

我使用Visual Studio库来执行这些操作,而不是像WatiN这样的操作。

使用C#从HtmlDiv获取对象HtmlHyperLink

如果网页的代码不好,那么网页的测试应该会因为实现得不好而失败——简单。

在HTML中,两个元素不应该有相同的ID。因此,编写测试时只需要一个元素。由于测试的输入标记将提供具有相同ID的两个元素,因此测试应该失败并保持失败,直到问题在另一端得到实际解决。

黑客攻击你的测试来处理糟糕的实现是没有意义的,因为它破坏了测试的意义。

更新:我找到了这个答案,它可能会为找到嵌套的a元素提供解决方案。

Adrian提供了一个有用的修复链接:如何处理缺乏足够唯一属性的HTML控件的测试?

HtmlDiv myDiv = new HtmlDiv(this.IE);
myDiv.SearchProperties[HtmlDiv.PropertyNames.Class] = "ThisDiv";
myDiv.SearchProperties[HtmlDiv.PropertyNames.Id] = "UniqueID";
HtmlHyperlink myLink = new HtmlHyperlink(myDiv);
myLink.SearchProperties[HtmlHyperlink.PropertyNames.id] = "GenericButton";
Mouse.Click(myLink);