Selenium - Как щелкнуть ссылку по значению href в WebDriver

У меня есть этот кусок кода

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

person María Belén Esteban Menéndez    schedule 22.08.2016    source источник
comment
Я думаю, вам следует использовать By.id("subMenu1")   -  person Siva    schedule 22.08.2016
comment
Вы также можете напрямую использовать getDriver().findElement(By.linkText("Apply")).click();   -  person Siva    schedule 22.08.2016
comment
вы также можете использовать xpaths: //a[@id='subMenu1'] или //a[text()='Apply']   -  person kotoj    schedule 22.08.2016
comment
Вы можете использовать как: getDriver().findElement(By.className("fortification55")).click();   -  person Saurabh Gaur    schedule 22.08.2016


Ответы (2)


Поскольку у элемента есть onclick Event, WebElement – это элемент с поддержкой JavaScript. Итак, чтобы вызвать click() для элемента, вам нужно использовать that-i/48990165#48990165">WebDriverWait для elementToBeClickable(), и вы можете использовать любой из следующих Стратегии поиска:

  • Используя 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 в:

person DebanjanB    schedule 29.06.2020
comment
@ хороший ответ, который должен решить проблему, и хорошее объяснение, хорошо сделанное - person Asmoun; 30.06.2020

следующий код должен работать:

By.xpath("//a[@href='/iot/apply/device.do']")
person QA Square    schedule 22.08.2016