C# 使用C从HtmlDiv获取对象HtmlHyperLink#

C# 使用C从HtmlDiv获取对象HtmlHyperLink#,c#,coded-ui-tests,htmlcontrols,C#,Coded Ui Tests,Htmlcontrols,我正在visual Studio中运行一个测试项目,该项目正在为网页运行测试步骤 网页本身的编码很差。它是这样的: <a id ="GenericButton" </a> <div id="UniqueID" class="ThisDiv"> <a id ="GenericButton" </a> </div> 将导致单击第一个按钮,而不是div“UniqueID”内的按钮 我可以使用以下方法获取div: HtmlDiv

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

网页本身的编码很差。它是这样的:

<a id ="GenericButton" </a> 

<div id="UniqueID" class="ThisDiv">
    <a id ="GenericButton" </a> 
</div>
将导致单击第一个按钮,而不是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这样的操作。

如果网页的代码很糟糕,那么对网页的测试应该会失败,因为它的实现很简单

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

对测试进行黑客攻击以使用糟糕的工具是没有意义的,因为这会破坏测试的意义


更新:我找到了一个可以解决查找嵌套
a
元素的方法。

Adrian提供了指向修复程序的有用链接:


首先,您应该修复标记<代码>已修复。现在我能做什么?这个网站是你的吗?该网站需要在第一时间进行测试,因此,如果它在您的控制下,修复它将获得回报。该网站不是我的。我同意,但我无权访问此代码。我能做什么?这取决于你的测试目标,你需要解释一下。为什么要点击那个按钮?第一个按钮实际上不可见。但它仍然存在于html代码中。但两个按钮的用途相同。在某些情况下,第一个按钮将出现并可单击。但在测试条件下,它必须保持隐形。网页的问题与我的问题无关。我怎么才能捕获一个应该在div内部的链接呢?我不是在一台拥有Visual Studio版本的计算机上,该版本支持编码的UI测试,不幸的是,这让你很难尝试一些想法。但我相信这可能对您有所帮助。如果可能,在HTML中使用id或className标记,而不是像我在那个问题中所做的那样使用节点索引。
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;
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);