我有这段代码
<a href="/iot/apply/device.do" id="subMenu1" class="fortification55"
onclick="$('#deviceinfo').hide()">Apply</a>
我正在尝试使用
链接hrefgetDriver().findElement(By.name("subMenu1")).click();
但我收到了这个错误
org.openqa.selenium.NoSuchElementException: Unable to find element with name == subMenu1 (WARNING: The server did not provide any stacktrace information)
答案 0 :(得分:2)
由于元素具有onclick Event ,因此WebElement是启用了JavaScript的元素。因此,要在元素上调用click()
,您需要为elementToBeClickable()
使用WebDriverWait,并且可以使用以下Locator Strategies之一:
仅使用 cssSelector 属性,并且仅使用 href 属性:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a[href='/iot/apply/device.do']"))).click();
仅使用 xpath 和 href 属性:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@href='/iot/apply/device.do' and text()='Apply']"))).click();
使用规范的 cssSelector
:new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.fortification55#subMenu1[href='/iot/apply/device.do']"))).click();
使用规范的 xpath :
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='fortification55' and @id='subMenu1'][@href='/iot/apply/device.do' and text()='Apply']"))).click();
注意:您必须添加以下导入:
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.By;
您可以在以下位置找到有关 NoSuchElementException 的一些相关讨论:
答案 1 :(得分:1)
这应该有效 By.xpath(“// a [@href ='/ iot / apply / device.do']”)
答案 2 :(得分:0)
该链接定义了is属性,您应该使用它,因为开发人员应确保ID在整个页面中是唯一的。 By.name的输入实际上是id而不是属性名称。使用@siva在评论中提到的内容,即By.id(&#34; subMenu1&#34;)。