Щелчок элемента селена перехвачен из-за нижнего колонтитула - PullRequest
0 голосов
/ 28 марта 2020

Я написал этот код:

try{
    Actions actions = new Actions(driver);
    actions.moveToElement(element);
    actions.perform();
    robot.delay(500);
    element.click();
}catch(WebDriverException clickIntercepted){
    robot.keyPress(KeyEvent.VK_PAGE_DOWN);
    robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
    element.click();
}

Элемент "element" находится вне области просмотра, но когда я перехожу к элементу, страница прокручивается, пока элемент не находится в области просмотра, но это за нижним колонтитулом, поэтому, когда я пытаюсь щелкнуть по нему, я получаю исключение при перехваченном щелчке. Чтобы обойти это, я нажимаю клавишу Page down и отпускаю, проблема в том, что она работает, только если мой браузер находится в верхней части экрана, и если я делаю что-то еще, это не работает. Можно ли прокрутить, пока нижний колонтитул не будет закрыт элементом без использования javascriptexecutor или нажатия клавиши вниз страницы? Я также пытался

moveToElement (element, x, y)

, но он такой же, как moveToElement (element)

Это HTML код нижней части страницы:

<div id="bottom">
                        <div id="errorboxcomponent" class="">
        <div id="decisionTB" style="display:none;">
    <div id="errorBoxDecision" class="errorBox TBfixedPosition">
        <div class="head"><h4 id="errorBoxDecisionHead">-</h4></div>
        <div class="middle">
            <span id="errorBoxDecisionContent">-</span>
            <div class="response">
                <div style="float:left; width:180px;">
                    <a href="javascript:void(0);" class="yes"><span id="errorBoxDecisionYes">.</span></a>
                </div>
                <div style="float:left; width:180px;">
                    <a href="javascript:void(0);" class="no"><span id="errorBoxDecisionNo">.</span></a>
                </div>
                <br class="clearfloat">
            </div>
        </div>
        <div class="foot"></div>
    </div>
</div>

<div id="fadeBox" class="fadeBox fixedPostion" style="display:none;">
    <div>
        <span id="fadeBoxStyle" class="success"></span>
        <p id="fadeBoxContent"></p>
    </div>
</div>

<div id="notifyTB" style="display:none;">
    <div id="errorBoxNotify" class="errorBox TBfixedPosition">
        <div class="head"><h4 id="errorBoxNotifyHead">-</h4></div>
        <div class="middle">
            <span id="errorBoxNotifyContent">-</span>
            <div class="response">
                <div>
                    <a href="javascript:void(0);" class="ok">
                        <span id="errorBoxNotifyOk">.</span>
                    </a>
                </div>
                <br class="clearfloat">
            </div>
        </div>
        <div class="foot"></div>
    </div>
</div>
    </div>
    </div>
<script type="text/javascript">
      initBuffBar();

initIndex();

    </script>

<div id="siteFooter">
            <div class="content" style="font-size:10px">
                 <div class="fleft textLeft">
                     <a class="tooltip js_hideTipOnMobile overlay" href="URL;component=changelog&amp;ajax=1" data-overlay-class="popupWidthFixed" data-overlay-iframe="true" data-iframe-width="680" data-overlay-title="Note di versione" title="Note di versione">7.2.1</a>
                     <a class="homeLink" href="URL" target="_blank">...</a>
                 </div>
                 <div class="fright textRight">
                     <a href="URL" target="_blank">Help</a>|
                     <a href="URL" target="_blank">Forum</a>|
                     <a class="overlay" href="URL;component=rules&amp;ajax=1" data-overlay-iframe="true" data-iframe-width="450" data-overlay-title="Regole">Rules</a>|
                     <a href="URL;product=..." target="_blank">Contatti</a>
                 </div>
            </div>
        </div>

И это элемент:

<img src="https://g1.ge.gsv.net/cdn9d/8e0e60340445budse18a1804b42f179.gif" width="16" height="16" alt="moon" class="icon-moon">

Нижний колонтитул зафиксирован в нижней части DOM, поэтому элемент находится позади него.

Здесь вы можете видеть элемент «луна», как отмеченные, за нижним колонтитулом после moveToElement (элемент)

Immagine.png

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Вы можете нажать на элемент, используя JavascriptExecutor click, так как JavascriptExecutor методы click напрямую взаимодействуют со структурой dom.
Вы можете сделать это следующим образом:

JavascriptExecutor js = (JavascriptExecutor)driver;
WebElement element =  wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//img[@alt='moon' and @class='icon-moon']")));
js.executeScript("arguments[0].click();", element);
0 голосов
/ 28 марта 2020

Попробуйте решение ниже:

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("Your element Id")));

Actions builder=new Actions(driver);
builder.moveToElement(element).click().build().perform();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...