我正在使用Java
和Selenium
来编写测试。在目标应用程序的某个地方,我有一个列表,所以我需要点击列表底部的元素。我使用下面的代码:
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)处无法点击。其他元素将收到点击:
答案 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();