我正在做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。
答案 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']"));