WatiN: Невозможно дважды щелкнуть элемент - ошибка «Не удалось найти элемент» - PullRequest
0 голосов
/ 13 января 2012

Я столкнулся с проблемой, когда мне нужно дважды щелкнуть элемент. При первом щелчке элемента он расширяет дерево на странице, второй раз закрывает дерево. При первом щелчке по элементу проблем не возникает.

Вот часть кода 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 с тем же результатом. Может ли кто-нибудь пролить свет на то, что может вызывать эту ошибку при разрыве двух событий щелчка, но не когда события щелчка происходят спина к спине?

1 Ответ

0 голосов
/ 18 января 2012

Я все еще не уверен, почему возникла эта проблема, но я нашел способ обойти это. Сначала я сохраняю идентификатор содержащего Div прямо перед первым кликом:

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();

Затем, когда я хочу выполнить второй щелчок, я использую идентификатор, который я сохранил ранее, чтобы снова найти содержащий Div:

//Close old agency's tree
var agency2 = ie.ElementOfType<Div>(Find.ById(currentAgency));
var agencyTab2 = agency2.ElementWithTag("a", Find.ByIndex(0));
agencyTab2.Click();
...