1

我有这段代码

<a href="/iot/apply/device.do" id="subMenu1" class="fortification55"
                                                        onclick="$('#deviceinfo').hide()">Apply</a>

我正在尝试使用 href 链接

getDriver().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)
4

2 回答 2

2

由于元素具有onclick 事件,因此WebElement是启用JavaScript的元素。因此,要调用click()您需要使用WebDriverWait的元素elementToBeClickable(),您可以使用以下任一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的相关讨论:

于 2020-06-29T13:44:20.413 回答
-1

以下代码应该可以工作:

By.xpath("//a[@href='/iot/apply/device.do']")
于 2016-08-22T18:32:22.377 回答