Asp.net mvc 硒+;MVC4:如何查找包含在特定父元素中的元素

Asp.net mvc 硒+;MVC4:如何查找包含在特定父元素中的元素,asp.net-mvc,asp.net-mvc-4,selenium,Asp.net Mvc,Asp.net Mvc 4,Selenium,我在做MVC4应用程序,并为其创建Selenium测试。我的问题是,我想查找元素,但只包含在 我的解决方案是在下面添加的,但它不起作用: private static IWebElement FindZoneByDataOrder(IWebDriver webDriver, int dataOrderId) { var parentForDropElement = webDriver.FindElement(By.XPath("//li[@data-order='" + dataOrde

我在做MVC4应用程序,并为其创建Selenium测试。我的问题是,我想查找元素
    ,但只包含在
  • 我的解决方案是在下面添加的,但它不起作用:

    private static IWebElement FindZoneByDataOrder(IWebDriver webDriver, int dataOrderId)
    {
        var parentForDropElement = webDriver.FindElement(By.XPath("//li[@data-order='" + dataOrderId + "']"));
        var dropElement = parentForDropElement.FindElement(By.XPath("//ul[@class='connectors ui-sortable']"));
        return dropElement;
    }
    
    我的HTML页面的一部分:

    ....
    <div class="zones-system-creator" style="min-height: 430px;">
        <ul id="zonesCreateSystem" class="">
                <li data-zoneid="24829" class="empty zoneLi ui-droppable" data-order="1">                
                   <div id="warningInfoBoxContainer"></div>                   
                    <ul class="products ui-sortable"></ul>
                    <ul class="connectors ui-sortable"></ul>
                </li>
       </ul>
    </div>
    ....
    
    。。。。
    
        ....

        更新1:我将zoneID更改为dataOrderId,因为我们只关心dataOrderId。

        我在代码中看到一些问题。您讨论了数据顺序,但在方法中传递了zoneId。因此,我添加了另一个名为dataOrder的参数,并搜索同时具有区域和数据顺序属性的
        LI
        元素:

        "//li[@data-zoneid='" + zoneId + "'][@data-order='"+dataOrder+"'"]
        
        然后搜索具有指定类的
        ul
        元素。还将元素合并为一行:

        代码:

        private static IWebElement FindZoneByDataOrder(IWebDriver webDriver, int zoneId, int dataOrder)
        {       
            return driver.findElement(By.xpath("//li[@data-zoneid='" + zoneId + "'][@data-order='"+dataOrder+"']//ul[@class='connectors ui-sortable']"))");
        }
        
        return driver.findElement(By.xpath("//li[@data-order='"+dataOrderId+"']//ul[starts-with(@class, 'connectors')]"));
        
        编辑以下问题的答案编辑:

        private static IWebElement FindZoneByDataOrder(IWebDriver webDriver, int zoneId, int dataOrder)
        {       
            return driver.findElement(By.xpath("//li[@data-zoneid='" + zoneId + "'][@data-order='"+dataOrder+"']//ul[@class='connectors ui-sortable']"))");
        }
        
        return driver.findElement(By.xpath("//li[@data-order='"+dataOrderId+"']//ul[starts-with(@class, 'connectors')]"));
        

        如果您想在硒元素中找到一种元素,我找到了两种可行的解决方案:

        result = webDriver.FindElement(By.XPath("//li[@data-order='" + dataOrderId+ "']"));
        var result2 = result.FindElement(By.XPath(".//ul[@class='connectors']"));
        
        
        result = webDriver.FindElement(By.CssSelector("li[data-order='" + dataOrderId+ "']"));
        result = result.FindElement(By.CssSelector("ul[class='connectors']"));
        

        我明天会测试它。感谢现在1)您忘记了.XPath的
        By
        2)为了让代码更清晰,我在代码中做了一些小修改。3) 您的代码不工作是的,被.xpath遗忘了。现在更新它。添加了编辑过的答案。
        @id
        应该是
        @class
        。很高兴你自己找到了答案。