Как щелкнуть по элементу Li в Селене по javascript - PullRequest
0 голосов
/ 15 апреля 2020

Интересно, как мы можем щелкнуть по элементу внутри элемента li в сценарии селена с помощью javascript. Я попробовал несколько способов, но это могло решить мою проблему, например, By.cssSelector или css. но ошибкой всегда является ElementClickInterceptedError: перехват элемента click: Другой элемент получил бы элемент click или like, не активируемый щелчком в точке

Я хотел бы нажать на второй li в html, но внутри этого html имеет мало предметов.

Интересно, почему он продолжает говорить, что другой элемент получит щелчок? Я правильно выбрал a href, но он повторяет приведенное выше утверждение. Могу ли я знать, есть ли другие причины, вызвавшие это?

Html

<ul class="navbar-nav">
  <li class="nav-item"></li>
  <li class="nav-item">
    <a class="aaa" href="abc">
     <span>
      <fa-icon></fa-icon>
      <span jhitranslate="a.b.c"></span>
     </span>
    </a>
  </li>
</ul>

Я пробовал это, но это дает мне timeouterror

async function clickDashBoard() {
    let aa =
        await driver.wait(until.elementLocated(By.css("navbar-nav li:nth-child(2).nav-item")), 10000);        
        await aa.click();
}

полный xpath: / html / body / jhi-main / div [1] / jhi-navbar / nav / div / ul / li [2] / a / span / span

Может кто-нибудь помочь мне в этом? Спасибо.

1 Ответ

0 голосов
/ 15 апреля 2020

Я не проверял это, так как не знаю, где вы это испытываете. Но, возможно, ниже работает.

        //Find element, I am assuming the a element is the one to click

        WebElement element = driver.findElement(By.cssSelector("ul.navbar-nav > li.nav-item > a"));
        JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;

        //Use JS to click on element

        jsExecutor.executeScript("arguments[0].click()", element);

        //or if that does not work, use dispatch a mouse event.

        jsExecutor.executeScript(
                "var rect = arguments[0].getBoundingClientRect();" +
                          "arguments[0].dispatchEvent(new MouseEvent('click', {" +
                          " 'view': window," +
                          " 'bubbles': true," +
                          " 'cancelable': true," +
                          " 'clientX': rect.left + rect.width/2," +
                          " 'clientY': rect.top + rect.height/2" +
                          "}))"
                , element);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...