2016-08-25 42 views
3

我無法找到是按鈕的元素。如何處理硒中重複使用的元素(複製)

第一按鈕

<div class="col-md-12 col-sm-12 col-xs-6"> 
<input type="hidden" value="113" name="vendor_id"/> 
<input id="vendor_submit" class="btn btn-primary mb10 SaveBtn" type="submit" value="Save & Close" name="submit"/> 

我已經使用這個命令來定位它

driver.findElement(By.xpath(".//*[@id='vendor_submit']")).click(); 

第二個按鈕

<div class="col-md-12 col-sm-12 col-xs-6"> 
<input type="hidden" value="113" name="vendor_id"/> 
<input type="hidden" value="" name="vendor_hr_account_id"/> 
<input id="vendor_submit" class="btn btn-primary mb10 SaveBtn" type="submit" value="Save" name="submit"/> 

問題

現在,因爲他們都在同一頁上,我無法找到第2個按鈕,因爲重複因素。只有類型不同。 1st has value =「保存&關閉」 2nd has value =「保存」

請幫我找到第二個按鈕。

+0

某個頁面的ID必須是唯一的。你應該改變你的HTML,以便每個按鈕都有自己的ID。這不是Selenium的限制,而是HTML規範的一部分。 – Jasha

回答

1

如果有具有相同ID兩個要素,我會建議您嘗試使用cssSelector其屬性value這將是既獨特又如下速度遠遠超過xpath: -

driver.findElement(By.cssSelector("input#vendor_submit[value = 'Save']")).click(); 

Edited1 : - 如果您要獲取的元素在您點擊時不可見,請點擊使用WebDriverWait之前等待,直到元素可見並可點擊,如下所示: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement submit = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#vendor_submit[value = 'Save']"))); 
submit.click(); 

Edited2: - 如果不幸上述方法無效,嘗試點擊下面使用JavascriptExecutor: -

WebElement el = driver.findElement(By.cssSelector("input#vendor_submit[value = 'Save']")); 
((JavascriptExecutor)driver).executeScript("arguments[0].click()", el); 
+0

元素不可見問題 – niazi

+0

所以這是否在頁面上可見? –

+0

是的兄弟是可見的 – niazi

1

可以通過同時增加值條件的XPath的分化。 所以基本上你可以用.//*[@id='vendor_submit' and @value='Save'],而不是在你的driver.findelement

+0

元素不可見問題 – niazi

1

可以在xpath只使用value屬性:

driver.findElement(By.xpath(".//input[@value='Save']")).click(); 
-1

,可以使用絕對的XPath兩個按鈕,它們的位置在HTML不同。

對於如:html/body/div[1]/div[3]/form/div[2]/div[2]/div[1]/div[1]/div[3]

要獲得此插件在Mozilla插件螢火蟲和firepath和檢查元素從那裏得到絕對的XPath。

+0

這不是建議在Selenium測試中使用這些xpaths。這可能會得到你想要的按鈕,但是當你改變DOM中的一個東西時,即使按鈕仍然存在,測試也會失敗。 – Jasha