单击列表底部的元素将从列表顶部获取元素

时间:2016-08-26 20:25:27

标签: java selenium selenium-webdriver selenium-chromedriver

我正在使用JavaSelenium来编写测试。在目标应用程序的某个地方,我有一个列表,所以我需要点击列表底部的元素。我使用下面的代码:

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='4']"))).click();

该列表的DOM如下所示:

<div class="verde-items services-items">
    <div class="verde-item service" data-service="271">
        <div role="button" data-selector-btn="">
            <span class="verde-item-name service-name">1</span>
        </div>
    </div>
    <div class="verde-item service" data-service="329">
        <div role="button" data-selector-btn="">
            <span class="verde-item-name service-name">2</span>
        </div>
    </div>
    <div class="verde-item service" data-service="269">
        <div role="button" data-selector-btn="">
            <span class="verde-item-name service-name">3</span>
        </div>
    </div>
    <div class="verde-item service" data-service="270">
        <div role="button" data-selector-btn="">
            <span class="verde-item-name service-name">4</span>
        </div>
    </div>  
</div>

问题是,当我使用chrome时它可以工作,但是当我使用firefox时,它向下滚动到列表的底部,其中元素是但是它试图单击列表顶部以便我得到错误:

  

元素在点(781,9)处无法点击。其他元素将收到点击:

1 个答案:

答案 0 :(得分:1)

正如您所说,此元素位于底部,在滚动后可见。

Selenium尝试滚动到该元素,然后单击它。这是因为Selenium不会与元素交互,除非它认为它是可见的。

向元素滚动隐式发生,因此您只需要找到该项目,然后按照以下方式使用它: -

WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='4']")));

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

wait.until(ExpectedConditions.elementToBeClickable(element)).click();