Selenium + MVC4:如何查找特定父元素中包含的元素

时间:2016-01-08 12:32:35

标签: asp.net-mvc asp.net-mvc-4 selenium

我正在做MVC4应用程序,我正在为它创建Selenium测试。我的问题是我想找到元素<ul class="connectors ui-sortable"></ul>,但只包含在<li class="empty zoneLi ui-droppable" data-order="X">

我的解决方案是下面添加的一个,但它不起作用:

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>
....

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

2 个答案:

答案 0 :(得分:0)

我发现您的代码中存在一些问题。您谈到了数据顺序,但在方法中传递了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')]"));

答案 1 :(得分:0)

如果你想用Selenium在另一个元素中找到一个元素,我找到了2个工作解决方案:

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']"));