C# selenium innerHtml, search for ID

本文关键字:for ID search selenium innerHtml | 更新日期: 2023-09-27 18:34:19

我在搜索 innerHTML 元素时遇到了一点麻烦。编辑:(我的意思是从innerHTML中搜索元素。

目标:查找变量内部的 ID

为我的英语不好而烦恼,希望大家都能理解。

//All css elements
var itemHolder = WebDriver.FindElementsByClassName("itemHolder");
//Get singleElement from itemHolder
foreach (var element in itemHolder)
{
    //i think that easy to understand
    if (!element.GetAttribute("style").Equals("display: none;"))
    {
        var innerHtml = element.GetAttribute("innerHTML");
        //simply regex for find the right one element
        string reg = @"(item app730 context2)";
        bool command = Regex.IsMatch(innerHtml, reg, RegexOptions.IgnoreCase);
        if (command)
        {
            Console.WriteLine(element.GetAttribute("innerHTML"));
            var inner = element.GetAttribute("innerHTML");
            //inner = <div style='border - color: rgb(210, 210, 210); z - index: 3; position: relative; ' class='item app730 context2' id='item730_2_3294048593'></div>
           //now i need id from inner, how can i do it?
           //first variant: Regex inner, found item730_2_3294048593, that is a hard way i find. im bad in regex
           //Regex Example: strike = Regex.Match(inner, "(id=')[a-zA-Z_0-9]{20}").ToString();
           //second and i think bether variant but do not have a plan how to start: P
           // 1. convert inner to html elements
           // 2. search id
           //var found = Regex.Match(inner, "");
            break;
        }
    }
}

我希望有人可以帮助我,非常感谢!问候象牙吸烟者

C# selenium innerHtml, search for ID

我假设你有这样的 HTML 布局:

<div id="outer">
    <div id="inner">
        hello
    </div>
</div>

如果是这种情况,您可以使用 IWebElementFindElement方法来查找子元素:

IWebElement outer = FindElement(By.XPath("//*[@id='outer']"));
IWebElement inner = outer.FindElement(By.XPath("./div"));

请注意,内部的 XPath 在开头有一个句点,表示任何结果都必须是我们正在搜索的元素的子级。

从那里您可以执行inner.GetAttribute("id")以获取您的身份证。

扩展Ben Chand的答案。 请原谅这个伪代码:

IWebElement outer = By.XPath("//*[@class='itemHolder']");
....
public By getInnerByIndex(int index) {
    By inner = By.XPath(".//div[@id='innerHtml'][" + index + "]");
    By innerLocator = new ByChained(outer, inner);
    return innerLocator;
}

我从 innerHTML 获取 ID 的方式。(动态内容)

 var strike = Regex.Match(inner, "(id=')[a-zA-Z_0-9]{20}");
                    result = strike.ToString().Replace("id='", "");

正则表达式输出:id='item730_2_3294048593正则表达式输出替换:item730_2_3294048593

谢谢你的回答!

问候象牙吸烟者