我遇到了一个问题,我需要点击两次元素。第一次单击元素时,它会在页面上展开树,第二次关闭树。第一次单击元素时没有问题。
以下是我正在使用的HTML代码的一部分:(我点击的元素是'a'标记。)
<div id="uasMainForm:uasTabs:0:agencyTree-d-rt-c" name="c">
<div title="" class="iceTreeRow" id="uasMainForm:uasTabs:0:agencyTree-d-4" name="nd">
<a id="uasMainForm:uasTabs:0:agencyTree:4" onclick="document.forms['uasMainForm']['uasMainForm:uasMainForm:uasTabs:0:agencyTree_idtn'].value='4';iceSubmitPartial( document.forms['uasMainForm'], this,event); return false;" onblur="setFocus('');" href="javascript:;">
奇怪的是,如果我在第一次运行后立即运行第二次点击它完全关闭了树,但是如果我用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<Div>(Find.ByText(agencyName));
agencyTab = agency.ElementWithTag("a", Find.ByIndex(0));
agencyTab.Click();
MessageBox.Show("Hey!");
agencyTab.Click();
以上代码抛出错误:找不到符合条件的元素标记:Index = 0
我也试过Find.ById而不是ByIndex,结果相同。任何人都可以解释在分解两个点击事件时可能导致此错误的原因,但是当点击事件发生在背后时却没有?
答案 0 :(得分:0)
我仍然不确定为什么会出现这个问题,但我找到了解决方法。首先,我在第一次点击之前保存包含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();
然后,当我想要执行第二次点击时,我使用之前保存的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();