Selenium - 如何在WebDriver中通过href值单击链接

时间:2016-08-22 11:55:29

标签: selenium

我有这段代码

<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)

3 个答案:

答案 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;)。