使用Selenium Webdriver和Java等待表格完全加载

4
有没有一种方法可以使用Selenium和Java等待表格完全加载?在我的情况下,看起来表格是使用ajax和/或jquery加载的。到目前为止,我能找到的唯一可能的解决方案就是在毫秒级别上设置一个简单的超时/暂停。我正在寻找更高级的解决方案,而不是硬编码的解决方案。谢谢

2
欢迎来到SO。请包含您尝试过的解决方案,为什么它们没有起作用以及期望的结果。这将有助于我们找出您代码中的问题。请参阅:如何创建一个最小、完整和可验证的示例。谢谢! - palaѕн
在表格完全加载之前是否会出现任何加载图像? - Saurabh Gaur
@palaѕн 我已经添加了我迄今为止尝试过的内容。 - Zvika Nadav
@SaurabhGaur 不,图片根本没有加载。 - Zvika Nadav
在驱动程序尝试初始化driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS)之后。 - Leon Barkan
@LeonBarkan 这是一个超时问题,不是其他情况。 - Zvika Nadav
1个回答

4
Selenium提供了WebDriverWaitExpectedConditions.visibilityOfElementLocated,用于等待在DOM上可见的元素。您可以按照以下方式尝试:
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement el = wait.until(ExpectedConditions.visibilityOfElementLocated(By...));

注意:在这里您可以提供作为定位符的By,例如您的表格元素的.id().className().xpath().cssSelector()等等。它会等待30秒来检查您的表格在DOM上的可见性。

如果元素在30秒内不可见,则会抛出TimeoutException异常。

例如:如果您想要通过id检查表格的可见性,只需运行wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("your table id")));

您也可以增加或减少超时时间。

希望这能帮到您..:)


1
谢谢,我会尝试这个解决方案。你能否简单解释一下DOM是什么?还有数字30代表什么?它是元素可见的毫秒/秒超时时间吗?如果不可见会抛出异常吗?此外,el的用途是什么?我只需要运行wait.until(ExpectedConditions.visibilityOfElementLocated(By...));吗?谢谢。 - Zvika Nadav
@ZvikaNadav 30是超时限制,单位为秒。您可以增加或减少它。 - Saurabh Gaur
1
谢谢你提供的信息。目前你的解决方案解决了我的问题,你知道ExpectedConditions.visibilityOfElementLocated背后的实际过程是什么吗?能否再详细解释一下?谢谢 - Zvika Nadav
1
这太棒了,感谢您提供的信息和链接,非常有用。您是否还有其他类似的网站,我可以研究Selenium的方法/功能?先行致谢。 - Zvika Nadav
@ZvikaNadav,欢迎您随时前来查看。我在回答中为每个点都提供了链接,您可以点击了解每个点的信息...继续学习吧... :) - Saurabh Gaur
显示剩余26条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接