2014-02-06 35 views
0

只有div的內容是唯一的。因此,在下面的動態生成html,只有「我的文章-1245」是獨一無二的:如何選擇特定的動態div,如果我沒有唯一的ID或名稱,請使用Selenium?

<div class="col-md-4 article"> 
<h2> 
     My Article-1245 
    <a href="delete/6" class="btn btn-xs btn-danger article-btn pull-right hide fade in">Delete</a> 
    <a href="edit/6" class="btn btn-xs btn-info article-btn pull-right hide fade in">Edit</a> 
</h2> 
    <p>O ephemeral text! Here today, gone tomorrow. Not terribly important, but necessary</p> 
</div> 

如何選擇編輯/刪除特定的div的鏈接,使用Selenium? assertText/verifyText需要一個元素定位器,但我沒有任何唯一的ID /名稱(超出我的控制範圍)。會有很多這樣的div塊,其他內容文本都是動態生成的。

任何幫助,將不勝感激。

+0

是類=「COL-MD-4的文章」也動態生成 –

+0

號但這類是所有頁面上的文章一樣。所以,有多個這樣的div,都有相同的類。 – user3199909

+0

和另外一個問題href =「delete/6」對於鏈接將保持不變 –

回答

1

如果文本「我的文章」每次出現時,你可以使用下列內容:

//For Delete 
driver.findElement(By.xpath("//h2[contains(text(),'My Article-')]/a[text()='Delete']")); 
//For Edit 
driver.findElement(By.xpath("//h2[contains(text(),'My Article-')]/a[text()='Edit']")); 

希望它滿足您的要求:)

+0

我能夠使用JavaScript變量像$ {titletext}而不是'我的文章'?這是因爲我想插入多篇文章,並使用Selenium編輯每篇文章。因此,例如,我想選擇特定的文章,例如「我的文章-99」或「我的文章-43」。 – user3199909

+0

您可以使用簡單的字符串變量,您可以將它們保留在數組中,然後使用它們來發布文章並稍後使用它們來生成xpath。插圖:** // h2 [包含(text(),'_「+ YourVar +」_')]/a [text()='Delete'] ** – Husam

+0

我試過了,但總是選擇第一個h2,而不是最後一個。可能是因爲'包含'甚至匹配部分字符串。有沒有辦法確保完全匹配? – user3199909

1

匹配的文本始終是一個糟糕的自動化測試的概念。如果你想保持清潔和可靠的測試腳本,然後:

  1. 聯繫您的web開發獨特的標識符添加的元素
  2. 吸起來,並基於選擇什麼樣的存在。

您可以根據需要創建CSS選擇器。

你應該做的是使用父子關係創建選擇:

driver.findElement(By.cssSelector("div.article:nth-child(X) a[href^='delete']")); 

正如我懵了你的APPP的,這也假設所有article類都是同一父下。您可以用X替換您想要引用的div的編號。例如: -

<div id="someparent"> 
    <div class="...article" /> 
    <div class="...article" /> 
    ... 
</div> 
+0

+1,絕對正確。通過文本定位應始終是最後一個選項之一(好,但不鼓勵)。如果有人想要自動執行權限,請更改源代碼。 –

相關問題