Как получить коллекцию атрибутов в теге с помощью Watin? - PullRequest
0 голосов
/ 26 ноября 2011

Могу ли я получить все атрибуты, существующие в элементе?

Мне нужно это перебрать все атрибуты элемента и получить значения!

Я выполнил поиск в классе Element, но не вижу какого-либо свойства или метода, специфичных для возврата коллекции имен строк атрибутов, поэтому я могу выполнить итерации и GetAttributeValue ....

Любая помощь приветствуется.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 мая 2015

Вы можете использовать HtmlAgilityPack для того же.Он предоставляет HtmlNode.Attributes как HtmlAttributeCollection, который можно зациклить для получения имен и значений атрибутов.

0 голосов
/ 27 ноября 2011

Я написал метод, чтобы сделать это некоторое время назад, потому что (насколько я знаю), нет ничего встроенного в WatiN.С тех пор у меня не было никаких проблем с этим кодом, но я все еще считаю его ужасным взломом!Может быть, один из самых умных плакатов поможет улучшить его!HTH!

Фил

private void button1_Click(object sender, EventArgs e)
{
    using (IE browser = new IE("www.google.co.uk"))
    {
        Div div = browser.Div("hplogo");
        Dictionary<string, string> attrs = GetAllAttributeValues(div);
    }
}

private Dictionary<string, string> GetAllAttributeValues(Element element)
{
    if (element == null)
        throw new ArgumentNullException("Supplied element is null");
    if (!element.Exists)
        throw new ArgumentException("Supplied element does not exist");

    string html = element.OuterHtml; // element html (incl children)
    int idx = html.IndexOf(">");
    Debug.Assert(idx != -1);
    html = html.Substring(0, idx + 1).Trim(); // element html without children

    Dictionary<string, string> result = new Dictionary<string, string>();
    while ((idx = html.IndexOf('=')) != -1)
    {
        int spaceIdx = idx - 1;
        while (spaceIdx >= 0 && html[spaceIdx] != ' ')
            spaceIdx--;
        Debug.Assert(spaceIdx != -1);

        string attrName = html.Substring(spaceIdx + 1, idx - spaceIdx - 1);
        string attrValue = element.GetAttributeValue(attrName);
        result.Add(attrName, attrValue);

        html = html.Remove(0, idx + 1);
    }
    return result;
}
...