C# WatiN:无法单击元素两次-“;找不到元素“;错误

C# WatiN:无法单击元素两次-“;找不到元素“;错误,c#,watin,C#,Watin,我遇到了一个问题,需要在一个元素上单击两次。第一次单击元素时,它会在页面上展开一棵树,第二次则会关闭该树。第一次单击元素时没有问题 下面是我正在使用的HTML代码的一部分:(我正在单击的元素是'a'标记。) 奇怪的是,如果我在运行第一次单击后立即运行第二次单击,它会完美地关闭树,但如果我用MessageBox或其他代码将其分解,则在尝试执行第二次单击时会抛出错误 以下是有效的代码: agency = ie.ElementOfType<Div>(Find.ByText(agency

我遇到了一个问题,需要在一个元素上单击两次。第一次单击元素时,它会在页面上展开一棵树,第二次则会关闭该树。第一次单击元素时没有问题

下面是我正在使用的HTML代码的一部分:(我正在单击的元素是'a'标记。)


奇怪的是,如果我在运行第一次单击后立即运行第二次单击,它会完美地关闭树,但如果我用MessageBox或其他代码将其分解,则在尝试执行第二次单击时会抛出错误

以下是有效的代码:

agency = ie.ElementOfType<Div>(Find.ByText(agencyName));
agencyTab = agency.ElementWithTag("a", Find.ByIndex(0));
agencyTab.Click();

//MessageBox.Show("Hey!");
agencyTab.Click();
agency=ie.ElementOfType(Find.ByText(agencyName));
agencyTab=agency.ElementWithTag(“a”,Find.ByIndex(0));
代理选项卡。单击();
//MessageBox.Show(“嘿!”);
代理选项卡。单击();
以下是不起作用的代码:

agency = ie.ElementOfType<Div>(Find.ByText(agencyName));
agencyTab = agency.ElementWithTag("a", Find.ByIndex(0));
agencyTab.Click();

MessageBox.Show("Hey!");
agencyTab.Click();
agency=ie.ElementOfType(Find.ByText(agencyName));
agencyTab=agency.ElementWithTag(“a”,Find.ByIndex(0));
代理选项卡。单击();
MessageBox.Show(“嘿!”);
代理选项卡。单击();
上面的代码引发错误:找不到匹配条件的元素标记:Index=0


我还尝试了Find.ById而不是ByIndex,结果相同。有谁能解释一下,当两次点击事件分开时,是什么导致了这个错误,而不是当点击事件背靠背发生时?

我仍然不确定为什么会发生这个问题,但我找到了解决方法。首先,在第一次单击之前保存包含Div的Id:

var agency = ie.ElementOfType<Div>(Find.ByText(agencyName));

//Set current agency Id
currentAgency = agency.Id;

var agencyTab = agency.ElementWithTag("a", Find.ByIndex(0));
agencyTab.Click();
var-agency=ie.ElementOfType(Find.ByText(agencyName));
//设置当前代理Id
currentAgency=agency.Id;
var agencyTab=agency.ElementWithTag(“a”,按索引查找(0));
代理选项卡。单击();
然后,当我要执行第二次单击时,我使用先前保存的Id再次查找包含的Div:

//Close old agency's tree
var agency2 = ie.ElementOfType<Div>(Find.ById(currentAgency));
var agencyTab2 = agency2.ElementWithTag("a", Find.ByIndex(0));
agencyTab2.Click();
//关闭旧机构的目录树
var agency2=ie.ElementOfType(Find.ById(currentAgency));
var agencytab=agency2.ElementWithTag(“a”,Find.ByIndex(0));
agencytab.Click();

什么类型的类是
MessageBox
?我看不出这是WatiN框架的一部分……而且:如果在调试器中单步执行该代码,会发生什么?代码是在
MessageBox.Show(“Hey!”)
之后立即跳转到下一条语句,还是等待您关闭/单击消息框?MessageBox来自类System.Windows.Forms.MessageBox。代码等待您在消息框中单击“确定”。我刚刚注意到,在MessageBox注释掉的代码中,如果我缓慢地遍历代码,就会出现错误。似乎在第一次.Click()之后的几秒钟,agency.Exists变为“False”。我不确定为什么会发生这种情况,因为该Div显然仍在html代码中。如果在显示消息框后调用
agencyTab.Refresh()
,会有什么不同吗?我也尝试过,但没有成功。我想它可能在
agency=ie.ElementOfType(Find.ByText(agencyName)),查找文本时遇到了问题在第一个之后。单击发生。我知道标签的click事件会添加额外的div,但它不会删除我正在搜索的文本。
//Close old agency's tree
var agency2 = ie.ElementOfType<Div>(Find.ById(currentAgency));
var agencyTab2 = agency2.ElementWithTag("a", Find.ByIndex(0));
agencyTab2.Click();