如何处理selenium中的重用元素(复制)

时间:2016-08-25 05:50:01

标签: java selenium

我无法找到按钮元素。

第一个按钮

<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"/>

问题

现在因为它们都在同一页面上,由于重复因素,我无法找到第二个按钮。只有差异是类型。 1st有值=&#34; Save&amp;关闭&#34; 第二个有值=&#34;保存&#34;

请帮我找到第二个按钮。

4 个答案:

答案 0 :(得分:1)

如果有两个具有相同ID的元素,我建议您尝试使用 function renderProxyRequest(req, res) { // somesite.com is gzipped and also is chunked. var options = { protocol: 'http:', hostname: 'somesite.com', // passing in my current headers headers: req.headers, maxRedirects: 0, path: req.url, socketTimeout: 200000, connectTimeout: 1800, method: 'GET' } var proxyrequest = someProxyApi.request(options); proxyrequest.on('response', function (postresponse) { // postresponse is a buffer //postresponse.pipe(res); var responseFromServer = '' postresponse.on('data', function (data) { responseFromServer += data; }); postresponse.on('end', function () { // getting some jumbled string onto the browser. res.write(responseFromServer); res.end(); }) }); req.pipe(proxyrequest); } 及其属性cssSelector,这对于两者都是唯一的,并且比value快得多,如下所示: -

xpath

Edited1 : - 如果您要点击时获取元素不可见异常,则应在使用driver.findElement(By.cssSelector("input#vendor_submit[value = 'Save']")).click(); 点击之前等待,直到元素可见且可点击如下: -

WebDriverWait

Edited2 : - 如果遗憾的是上述内容不起作用,请尝试点击WebDriverWait wait = new WebDriverWait(driver, 10); WebElement submit = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#vendor_submit[value = 'Save']"))); submit.click(); ,如下所示: -

JavascriptExecutor

答案 1 :(得分:1)

您可以通过在xpath中添加值条件来区分。 所以基本上你可以在myqo@mail.com bfta@mail.com kjuy@mail.com

中使用.//*[@id='vendor_submit' and @value='Save']

答案 2 :(得分:1)

您只能使用value中的xpath属性:

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

答案 3 :(得分:-1)

您可以对按钮使用绝对xpath,因为它们的位置在HTML中不同。

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

要在mozilla中添加插件firebug和firepath,并通过inspect元素从那里获取绝对xpath。