2012-08-06 34 views
-2

我必須使用Selenium測試一些複雜的Web服務。硒nth匹配沒有共同父母的ID

問題是id元素正在從會話變爲會話。
例如有一堆輸入每個都有id前綴textf_id_DComboBox_並以連續數字結束,起始數字是隨機的(會話相關)。
那些輸入沒有一個共同的父如此nth-child不起作用\

我可以通過選擇找到第一輸入css=input[id^='textf_id_DComboBox_'],但我不知道如何找到下一個項目(1 7)匹配這個選擇器。 我發現了一些關於stackoverflow的建議,xpath選擇器應該被使用,但我無法採用我的用例的例子。

更新
我也有替代的選擇器,其捕獲第一輸入:css=td.DForm_treeGridNoWrap input

回答

1

您可以使用此的XPath,以選擇包含一個共同的ID的所有輸入的健康實例:

string comboBoxXPath = "//input[contains(@id, 'textf_id_DComboBox')]"; 
List<WebElement> comboBoxElements = driver.findElements(By.XPath(comboBoxXPath)); 

此時,您可以遍歷整個集合,或者您可以使用索引選擇要與哪個集合進行交互:

comboBoxElements[1] 
comboBoxElements[2] 
comboBoxElements[3] 

etc... 
+0

我使用硒腳本,所以你的答案已經導致我正確的解決方案:'xpath =(// input [contains(@id,'textf_id_DComboBox _')])[7]',謝謝 – 2012-08-07 08:01:39

0

那麼,這descrption沒有什麼幫助。您可以嘗試這些技巧:

  • 您可以撥打findElementWebElement這招可能會無法正常工作,因爲這些ID沒有共同的父。但是,如果他們被包裹,比如說,在表中,可以先找到表:

    WebElement table = driver.findElement(By.id("the-table")); 
    

再找到這樣的表中的所有輸入:

 List<WebElement> inputs = table.findElements(By.tagName("input")); 
  • 安裝硒IDE到你的Firefox並嘗試使用它記錄測試用例。您可以在Selenium IDE中使用目標進行遊戲。

  • 骯髒的方法

    List<WebElement> allInputs = driver.findElements(By.tagName("input")); 
    

    會發現在這些頁面中的所有輸入。

腳註:該代碼是Java和driver變量被認爲是WebDriver