我想用Watin做一個「兩步走」搜索。例如,我想要搜索具有類「abc」的ul-tag。然後,我想在該元素內搜索某個li標籤。代碼可能如下所示:Watin:在元素的子元素中搜索
ie.ElementWithTag("ul", Find.ByClass("abc")).ElementsWithTag("li", Find.ByXYZ());
但是元素沒有ElementWithTag方法。任何提示如何與Watin做到這一點?
我想用Watin做一個「兩步走」搜索。例如,我想要搜索具有類「abc」的ul-tag。然後,我想在該元素內搜索某個li標籤。代碼可能如下所示:Watin:在元素的子元素中搜索
ie.ElementWithTag("ul", Find.ByClass("abc")).ElementsWithTag("li", Find.ByXYZ());
但是元素沒有ElementWithTag方法。任何提示如何與Watin做到這一點?
Watin的作者告訴我,這將在下一個版本中得到支持。目前,這可以使用過濾器和lambda表達式來完成。
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聲明)與檢查正常類比它應該做的伎倆。
已在其新版本2.0.50.11579中實施。