2009-11-12 2 views
4

Я хочу сделать «двухэтапный» поиск с использованием Watin. Например, я хотел бы искать ul-tag с классом «abc». Затем я хотел бы найти определенный элемент li внутри этого элемента. Код может выглядеть так:Watin: Поиск в дочерних элементах

ie.ElementWithTag("ul", Find.ByClass("abc")).ElementsWithTag("li", Find.ByXYZ()); 

Но Element не имеет метода ElementWithTag. Любой намек, как это сделать с Ватином?

ответ

2

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

1

UPDATE

На самом деле я только что видел информацию, что есть ie.ElementWithTag сейчас, посмотрите на this вопрос.
Так может быть, остальная часть этого поста не будет, что полезно


Не иметь готовое решение для вас, но может быть отправной точкой.
Некоторое время назад я писал сценарий автоматизации для одной страницы. Я использовал powershell, но его легко переносить на C# (который, как я полагаю, вы используете).

Таким образом, в этой части сценария я поиска на странице элемент, который имеет тег вход и назван Сохранить изменения.

#getting property from com object::IHTMLDOMAttribute 
    function getProperty ([System.__ComObject] $obj, [string] $prop) 
    { 
     [System.__ComObject].InvokeMember($prop, [System.Reflection.BindingFlags]::GetProperty, $null, $obj, $null) 
    } 



    $ie = new-object -com "InternetExplorer.Application"; 


    $ie.visible = $true; 
    $ie.navigate("http://mytestpage.com"); 
    $doc = $ie.Document; 

$saveButton = $null; 
$inputElts = $null; 
$inputElts = $doc.getElementsByTagName('input') 
foreach ($elt in $inputElts) 
{ 
    $a = $elt.getAttributeNode('value') 
    if ($a -and (getProperty $a 'nodeValue') -eq 'Save changes') 
    { 
     $saveButton = $elt; 
    break; 
    } 
} 

Так что если вы должны заменить часть в цикле, который ищет Сохранить изменения свойства элемента (и удалить GetProperty объявления) с проверкой надлежащего класса, чем это следует сделать трюк.

Смежные вопросы