webDriver.findElement(By.id("row_0")).click();
,但出现异常:
org.openqa.selenium.ElementNotInteractableException: Element <tr id="row_0" class="row_0 txtSearchColor1"> could not be scrolled into view
我已经尝试像这样使用
JavascriptExecutor
:js.executeScript("arguments[0].scrollIntoView(true);", webDriver.findElement(By.id("row_0")));
js.executeScript("arguments[0].click();", webDriver.findElement(By.id("row_0")));
,但是没有任何效果,它什么也没做。这是元素HTML:
<tr id="row_0" class="row_0 txtSearchColor1">
<td></td>
<td></td>
<td></td>
</tr>
请注意,所有解决方案均可在Chrome(v65)上正常运行,并且该元素可见。有谁有同样的问题和解决方案?谢谢
编辑:元素的HTML代码:
#1 楼
到目前为止,对我有用的解决方法是,我使用“假”tr
:找到要单击的tr
,然后单击查找属于该
td
的tr
,然后点击它。它有效此错误已在Bugzilla上报告,建议采用此替代方法
评论
我对此很陌生,几乎在所有情况下都面临相同的问题。我不确定所提到的解决方法中的“ tr”和“ td”到底是什么意思。 1.找到我要单击的'tr'。2.找到属于该'tr'的'td',然后单击它,它将起作用。
–阿什维尼·贾达夫(Ashwini Jadhav)
20 Jan 30'3:30
@Ragnarsson Ashwini尝试在此处评论,但没有声誉,因此我在这里将其答案转换为评论。
–corsiKa♦
20年2月1日在17:09
#2 楼
升级到新的Firefox版本63时,我遇到了同样的问题。我使用Actions类单击一个元素。试试吧!WebElement element = WebDriver.findElement("locator");
Actions act=new Actions(driver);
act.moveToElement(element).click().perform();
#3 楼
请等待一段时间,然后再单击。请等待一段时间以将该页面加载/滚动到元素。评论
我尝试了所有方法:Thread.sleep()或带有“ return document.readyState”的显式和隐式Wait或waitForPageLoad(),或者我对其进行了调试,然后让它一直等到一切稳定后,再移至下一行以单击,但仍然Firefox上的相同错误
–拉格纳森
18 Mar 26 '18在8:49
#4 楼
我还使用JavaScript将元素滚动到视图中,但是我使用了x和y位置,并且还等待jquery处于活动状态:public static void scrollIntoView(WebElement ele) {
((JavascriptExecutor)driver).executeScript("window.scrollTo(" + ele.getLocation().x + "," + ele.getLocation().y + ")");
waitForJQueryToBeActive();
}
public static void waitForJQueryToBeActive() {
Boolean isJqueryUsed = (Boolean) ((JavascriptExecutor) driver)
.executeScript("return (typeof(jQuery) != 'undefined')");
if (isJqueryUsed) {
while (true) {
// JavaScript test to verify jQuery is active or not
Boolean ajaxIsComplete = (Boolean) (((JavascriptExecutor) driver)
.executeScript("return jQuery.active == 0"));
if (ajaxIsComplete)
break;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
}
}
}
评论
感谢您的回答。我尝试过,但不幸的是,它也不起作用,它通过了这些行,却无济于事,就像我的所有解决方案一样。当然,它适用于Chrome,只有Firefox不能。
–拉格纳森
18 Mar 26 '18在15:10
它是否至少尝试滚动,还是只是立即失败?也许您可以尝试滚动到所需元素以下的另一个元素,然后尝试访问所需的元素?
– Bill Hileman
18年3月26日在15:19
它不会尝试滚动,而只是运行整个块。我还尝试了您的建议,以查找组中具有该元素的findElements,然后尝试单击它,并且像其他错误一样出现了错误,“元素无法滚动到视图中” :(
–拉格纳森
18 Mar 26 '18在15:40
您能否在原始帖子中分享至少一部分HTML。我想知道是否可能存在某种不可见的blocker元素,或者iframe中的元素?
– Bill Hileman
18 Mar 26 '18在15:44
我不认为它在iframe中,只是表中的表。我更新了我的帖子。我试图单击周围的所有ID,但没有任何效果。
–拉格纳森
18-3-26在15:57
评论
可以在Firefox <59上使用吗?当您这样做时会发生什么? “ scrollIntoView(false);”
@VishalAggarwal您好,我已经尝试过js.executeScript(“ arguments [0] .scrollIntoView(false);”,element); ,但它什么也没做,只是绕过了块,也不例外。正如您在下面的讨论中看到的那样,我尝试了整行(抛出异常)或一列(只是绕过),但没有任何效果