我想点击其标识为clsArrowClick的锚标记,同一个标识位于另一个锚标记上。
<td class="text-center" style="width: 25% !important;">
<td class="arrow" data-toggle="tooltip" data-container="body" title=""
style="width: 25% !important; text-align:center" data-original-
title="Select/Show Data">
**<a id="clsArrowClick" class="clsarrowClick" href="#"
onclick="javascript:OpenAddNewWellPopup(this);">
<i class="fa fa-arrow-right"/>
</a>**
<input id="hdnIsSaved0" class="hdnIsArrowSaved" value="0" type="hidden"/>
</td>
</tr>
<tr id="2">
<td style="width:50%; class=" '="" data-container="body" data-
toggle="tooltip" title="" data-original-title="abcd">abcd</td>
<td class="text-center" style="width: 25% !important;">
<td class="arrow" data-toggle="tooltip" data-container="body" title=""
style="width: 25% !important; text-align:center" data-original-
title="Select/Show Data">
**<a id="clsArrowClick" class="clsarrowClick" href="#"
onclick="javascript:OpenAddNewPopup(this);">
<i class="fa fa-arrow-right"/>
</a>**
<input id="hdnIsSaved1" class="hdnIsArrowSaved" value="0" type="hidden"/>
</td>
我尝试了list,wait方法和简单的方法,但是我的程序抛出错误 线程“main”中的异常org.openqa.selenium.ElementNotVisibleException
喜欢
// WebDriverWait wait = new WebDriverWait(driver,30); //wait.until(ExpectedConditions.presenceOfElementLocated(By.className("clsArrowClick“))); //driver.findElement(By.className("clsarrowClick“)); driver.findElement(By.xpath( “(.//*[@ ID = 'clsArrowClick'])[1]”))上单击();
答案 0 :(得分:0)
尝试以下xpath可能适用于第二个链接。我没有测试过,我不知道你的页面的整个HTML,所以我说可能。
//a[@id='clsArrowClick'][2]
或者这个
//input[@id='hdnIsSaved1']../a[@id='clsArrowClick']
或如果您对点击第一个链接感兴趣
//td[@class='arrow']/a[@id='clsArrowClick']
答案 1 :(得分:0)
在您的代码中,您在找到元素之前使用presenceOfElementLocated
条件。需要注意的一点是,presenceOfElementLocated
只检查DOM上元素的存在,而不管它的可见性如何。您需要确保要获取的元素是可见的,因此您应该使用ExpectedConditions.visibilityOfElementLocated
。 visibilityOfElementLocated
保证该元素在DOM上可用并且也可见,这样有助于克服您所面临的org.openqa.selenium.ElementNotVisibleException
。
所以你的代码应该是这样的:
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.visibilityOfElementLocated(
By.xpath("(.//*[@id='clsArrowClick'])[1]")));
driver.findElement(By.xpath("(.//*[@id='clsArrowClick'])[1]")); //this step can be skipped
driver.findElement(By.xpath("(.//*[@id='clsArrowClick'])[1]")).click();
答案 2 :(得分:0)
element = driver.findElement(By.xpath("html/body/div[9]/div/div/div[3]/button[2]"));
js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
element = null;
js = null;
答案 3 :(得分:-1)
如alessandro-da-rugna所述,id应该是唯一的,我认为它应该是固定的。 Selenium在find元素方面也有局限性,如果有两个或两个以上的元素,它会选择第一个存在的元素,无论它是否可见,哪个click方法都要求元素可见并启用
要解决这个问题,有几种方法
//a[::following-sibling/input[@id='hdnIsSaved1']]
正如jayesh Doolani所提到的,你可以使用
WebElement myElement = wait.until(ExpectedConditions.elementToBeClickable(By.xpath()) myElement.click()
第二种方法是使用find元素,然后通过检查enable方法,通过检查其属性来确定符合条件的元素,并确保元素可单击。然后单击符合条件的元素