我在Firefox v.59,Selenium 3.11.0上遇到此问题。我只是单击一个元素,例如:

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代码:


评论

可以在Firefox <59上使用吗?

当您这样做时会发生什么? “ scrollIntoView(false);”

@VishalAggarwal您好,我已经尝试过js.executeScript(“ arguments [0] .scrollIntoView(false);”,element); ,但它什么也没做,只是绕过了块,也不例外。正如您在下面的讨论中看到的那样,我尝试了整行(抛出异常)或一列(只是绕过),但没有任何效果

#1 楼

到目前为止,对我有用的解决方法是,我使用“假” tr:找到要单击的tr,然后单击
查找属于该tdtr,然后点击它。它有效

此错误已在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