не удается нажать кнопку с помощью watin

<div class="flow-right">
    <button type="button" id="btnClear_page" class="uiButton" title="Clear" onmouseover="JSButtonUtils.doBtnOver(this)" onmousedown="JSButtonUtils.doBtnDown(this)" onmouseout="JSButtonUtils.doBtnOut(this)" onclick="if(JSButtonUtils.debounce(this, 1200)){ return false } else { return btnClear_page_click(this, true, true);}  ">
      <div class="uiButton-content">
        <div class="uiButton-label">Clear</div>
      </div>
    </button>
    <button type="button" id="btnSearch_page" class="uiButton primary" title="Search" onmouseover="JSButtonUtils.doBtnOver(this)" onmousedown="JSButtonUtils.doBtnDown(this)" onmouseout="JSButtonUtils.doBtnOut(this)" onclick="if(JSButtonUtils.debounce(this, 1200)){ return false } else { return btnSearch_page_click(this, true, true);}  ">
      <div class="uiButton-content">
        <div class="uiButton-label">Search</div>
      </div>
    </button>
</div>

У меня есть HTML-код выше, кнопка, завернутая в Div, я пытался найти кнопку и щелкнуть по ней, но безуспешно, а также попытался щелкнуть по Div, но безуспешно. Использование браузера IE9 и C#.

using (var browser = new IE("https://Site.com"))
            {
     browser.Div(Find.ByText("Search")).Click();
      browser.Button(Find.ById("btnSearch_page")).Click();
}

person Jay    schedule 23.07.2013    source источник
comment
В каком браузере вы пытаетесь это сделать?   -  person Karl Anderson    schedule 23.07.2013
comment
Как вы получаете свой объект IE? Прикрепление, вот так? IE browser = IE.AttachTo<IE>(Find.ByUrl("http://www.google.com"));   -  person Karl Anderson    schedule 23.07.2013
comment
@KarlAnderson обновил код.   -  person Jay    schedule 23.07.2013
comment
И если вы пройдете код, он получит значения для browser, а затем зависнет на browser.Div(Find.ByText("Search")).Click();?   -  person Karl Anderson    schedule 23.07.2013
comment
нет, скорее пишет, что не может найти элемент с атрибутом Search.   -  person Jay    schedule 23.07.2013
comment
Я бы рекомендовал разделить поиск элемента DOM на отдельную строку, например: var searchDiv = browser.Div(Find.ByText("Search"));. Это позволяет вам увидеть, сработало ли обнаружение элемента DOM или нет, а затем, если это так, вы можете работать с элементом в следующей строке, например: searchDiv.Click();   -  person Karl Anderson    schedule 23.07.2013
comment
Я не вижу DIV в вашей разметке с идентификатором Search, вы показываете всю свою разметку?   -  person Karl Anderson    schedule 23.07.2013
comment
давайте продолжим это обсуждение в чате   -  person Jay    schedule 23.07.2013


Ответы (2)


В прошлом у меня были проблемы с WatiN, и я всегда использовал защитные предложения в своем коде WatiN для защиты от NullReferenceException, например:

using (var browser = new IE("https://Site.com"))
{
    var SearchDiv = browser.Div(Find.ByText("Search"));
    // Only try to click the DIV if we found it
    if(null != SearchDiv)
    {
        SearchDiv.Click();
    }

    var SearchButton = browser.Button(Find.ById("btnSearch_page"));
    // Only try to click the button if we found it
    if(null != SearchButton)
    {
        SearchButton.Click();
    }
}
person Karl Anderson    schedule 23.07.2013
comment
Я нашел, основные моменты не проверены, Управление находится в Iframe, мне нужно сначала выбрать Iframe, а затем дочерние узлы. - person Jay; 23.07.2013

Элементы iframe рассматриваются как отдельные элементы формы, не подпадающие под основную форму. используя приведенный ниже код, мы можем щелкнуть любые дочерние элементы в iframe.

WatiN.Core.Frame frame = browser.Frame(Find.ById("frameMain"));
                var buttons = frame.Button(Find.ById("btnSearch_page"));
                if (buttons.Exists)
                {
                    buttons.Click();
                    browser.WaitForComplete();
                }
person Jay    schedule 24.07.2013