2016-08-25 104 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