以编程方式获取子元素 selenium c#

Get child element programmatically selenium c#

我想要实现的是以编程方式打开启用和显示的网页上的第一个视频。我通过使用 Xpath 搜索方法并单击第一个可用的来获取视频元素。我想要实现的是打开该分隔线(视频元素)并在其中搜索另一个分隔线,但特别是我已经点击过的分隔线内的那个分隔线。

这就是我现在尝试的方式:

 public void ClickOnTheProperty()
    {
        var isClicked = false;

        var properties = Driver.FindElements(By.XPath("//div[contains(@class, 'col-md-3 col-sm-3')]"));
        for (var i = 0; i < properties.Count; i++)
        {
            if (properties[i].Enabled && properties[i].Displayed)
            {
                var smallContainer =
                    properties[i].FindElements(By.XPath("//div[contains(@class, 'miniature lightingshow')]"));
                for (var j = 0; j < smallContainer.Count; j++)
                {
                    if (smallContainer[j].Displayed && smallContainer[j].Enabled)
                    {
                        var js = (IJavaScriptExecutor) Driver;
                        js.ExecuteScript("arguments[0].click()", smallContainer[i]);
                        isClicked = true;
                        break;
                    }
                }
            }
        }
        if (!isClicked)
        {
            throw new Exception("No property found");
        }
    }

有什么建议吗?如果你不明白我的问题是什么,或者我解释得不是很好,我会尽量额外回答你需要的所有问题。

你的问题是 XPath(不是 Selenium)需要更多的 'push' 来告诉它范围。

您的解决方案是将第二个 XPath 更改为:

//div[contains(@class, 'miniature lightingshow')]"

至:

.//div[contains(@class, 'miniature lightingshow')]"

. 告诉 XPath 'search within my current parent'.