当前位置: 首页 > 面试题库 >

如何在定位元素之前等待框架加载?

夹谷志
2023-03-14
问题内容

我正在尝试等待Selenium切换变化的帧,然后再等待另一个元素。即

var wait = new WebDriverWait(driver, 15);
wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.Id("frameA"));

var wait2 = new WebDriverWait(driver, 15);
// wait for element within frameA to exist
wait2.Until(ExpectedConditions.ElementExists(By.Id("elementA")));

如果我在Thread.Sleep(1000);第二次等待之前进行一次简单的处理,它的功能就很好,但是如果没有这样做,我会收到以下错误消息:

'unknown error: unhandled inspector error: {"code":-32000,"message":"Cannot find context with specified id"}
    enter code here

在等待填充该框架中的元素之前,是否有更好的方法来等待框架上下文切换完成?


问题答案:

您需要考虑以下几点:

切换到框架的代码行看起来很完美,不会引发任何错误:

var wait = new WebDriverWait(driver, 15);
wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.Id("frameA"));

在下一行中,您尝试了 ExpectedConditions 方法 ElementExists 。根据 API Docs
ElementExists
方法的定义为:

An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.

在元素 可见 之前不能与元素相互作用。因此,您需要使用以下方法
ElementIsVisible

var wait2 = new WebDriverWait(driver, 15);
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("elementA")));


 类似资料:
  • 我正在尝试等待Selenium在等待另一个元素之前切换帧。即。 如果我抛出一个简单的之前的第二个等待它的功能很好,但没有我得到以下错误: 在等待填充该框架内的元素之前,是否有更好的方法等待框架上下文切换完成?

  • 我的应用程序中有一个页面,它使用PrimeFaces DataTable来显示人员列表,其中第一列中每个人的小图像。当用户单击作为p:命令链接一部分的小图像时,我使用ajax在p:对话框中更新p: graph icImage,其中包含所选图像的路径,并使用命令链接的完整显示对话框。最后,我使用对话框的onShow将对话框居中。以下是xhtml: 上面的代码工作得很好,但对列表中的小图像和对话框中的

  • 我经常遇到Selenium的问题,脚本崩溃,因为我想访问尚未加载的元素。 目前我是这样做的,我在这些地方之前放了一个,但有时需要更长或更短的时间才能加载元素。 有没有办法等到元素加载完毕,一旦加载,立即继续执行其余的代码?

  • 我正在使用Android Espresso Web测试Android应用程序中的Web视图。它需要一些时间来完成与加载网站。在对元素执行单击操作之前,我需要等待它显示出来。我能用什么API吗?我不想使用sleep()方法。

  • 问题内容: 我试图让Selenium等待页面加载后动态添加到DOM的元素。试过这个: 如果有帮助,这里是: 但是它抛出一个-看起来像期望元素存在,所以这是有缺陷的。这一定是Selenium的面包和黄油,不想重新发明轮子……任何人都可以提出其他选择,理想情况下不用自己动手做? 问题答案: 需要等待时,您需要异常调用以忽略。 有关更多信息,请参见FluentWait文档。但是请注意,此条件已经在Exp

  • 问题内容: 我正在开发Chrome中的扩展程序,但我想知道:找出元素何时存在的最佳方法是什么?使用纯JavaScript,间隔检查直到元素存在,或者jQuery是否有一些简单的方法来执行此操作? 问题答案: 由于性能问题,不建议将其与其他DOM突变事件一起弃用- 推荐的方法是使用MutationObserver来监视DOM。不过,只有新的浏览器才支持此功能,因此您应该在不可用时退回。