2014-02-07 46 views
2

我正在努力使用量角器(JS Webdriver)在我的angulars JS应用程序中找到一些元素。如何找到子菜单元素(xpath,className或css定位器)

继承人是我的HTML:

<div id="numDispBox" ng-mouseleave="hideNumDisplayBox()" style="display: none;"> 
    <div class="numDispOption transition_2" ng-click="UpdateNbResultPerNode(20)">20</div> 
    <div class="numDispOption transition_2" ng-click="UpdateNbResultPerNode(40)">40</div> 
    <div class="numDispOption transition_2" ng-click="UpdateNbResultPerNode(60)">60</div> 
    <div class="numDispOption transition_2" ng-click="UpdateNbResultPerNode(80)">80</div> 
</div> 

我希望能够选择第二,第三和第四内部的div。

我已经使用的类名但没有奏效:

element(by.css('[ng-click="UpdateNbResultPerNode(60)"]')); 

我不能也,以找出萤火的XPath的,当我点击检查我的子菜单中消失,甚至当我阻止JS突变。

感谢

回答

1

我会用XPath来找到这个元素。

的代码应该是这样的:

driver.findElement(By.xpath("//div[text()='60']")); 

或者,也许你需要先找到父DIV:

driver.findElement(By.xpath("//div[@ng-click='UpdateNbResultPerNode(60)']")); 

您也可以通过引用这样的文字这样做

driver.findElement(By.xpath("//div[@id='numDispBox']/div[text()='60']")); 

我有一个关于如何利用XPath与webDriver的视频: http://community.neustar.biz/community/wpm/load_testing/blog/2013/11/19/utilizing-xpath-to-interact-with-elements

布赖恩Kranson
:Neustar公司/专业服务工程师

1

在Ruby中,你可以做(​​这是为你想用JS的webdriver做同一个概念):

driver.find_element(:css, '#id .class:nth-child(1)) 
+1

我不认为n个子选择是从零开始的。 http://www.w3.org/TR/css3-selectors/#nth-child-pseudo –

+0

你是对的。他们不是。感谢您的支持! –

1

有很多方法可以做到这一点,让我列表中的两个selectors能找到所需要的元素。

  • 惠特尼伊弥拉提到的那个将是一个不错的选择。

css = #numDispBox div:nth-child(n)

在你的情况n可以是1,2或3来定位第二,第三或第四div元件。

  • 您还可以尝试使用+找到它的兄弟姐妹。

例如,要找到第二个div元素,以下选择器将工作。

css = #numDispBox > div + div

1

您还可以使用element.all:

element.all(by.css('#numDispBox numDispOption')).then(function(items){ 
    items[1].click(); 
    items[2].click(); 
    items[3].click(); 
}); 

element.all(by.css('#numDispBox numDispOption')).get(1) 
element.all(by.css('#numDispBox numDispOption')).get(2) 
element.all(by.css('#numDispBox numDispOption')).get(3)