2014-02-07 82 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)