当前位置: 首页 > 知识库问答 >
问题:

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

易星纬
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")));

如果我抛出一个简单的线程。睡眠(1000);之前的第二个等待它的功能很好,但没有我得到以下错误:

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

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

共有3个答案

巫马善
2023-03-14

这就是你可以做到的:

var wait = new WebDriverWait(new SystemClock(), driver, TimeSpan.FromSeconds(timeout), TimeSpan.FromSeconds(sleepInterval)); 
wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt("yourFrameName"); 
driver.SwitchTo().Frame("yourFrameName");
司马洲
2023-03-14

您可以等待帧本身可单击:

wait2.Until(ExpectedConditions.ElementExists(By.Id("YOURFRAMEID")));
唐宏壮
2023-03-14

有两件事你需要考虑:

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

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

在下一行中,您尝试了ExpectedConditions方法ElementExists。根据API文档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.

在元素可见之前,Selenium无法与元素交互。因此,您需要使用方法ElementIsVisible,如下所示:

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

在这里,您可以在iframe下找到关于如何处理#文档的详细讨论

 类似资料:
  • 问题内容: 我正在尝试等待Selenium切换变化的帧,然后再等待另一个元素。即 如果我在第二次等待之前进行一次简单的处理,它的功能就很好,但是如果没有这样做,我会收到以下错误消息: 在等待填充该框架中的元素之前,是否有更好的方法来等待框架上下文切换完成? 问题答案: 您需要考虑以下几点: 切换到框架的代码行看起来很完美,不会引发任何错误: 在下一行中,您尝试了 ExpectedCondition

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

  • 我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面

  • 如何在SeleniumWebDriver中执行任何活动之前等待ajax加载?我有一个表单,我通过脚本填充表单字段,然后单击一个按钮,然后打开下一个表单,并从上一个表单中预填充几个字段,我想等待该表单,以便表单得到填充,然后我的下一个脚本运行ie,直到我的ajax加载。我正在使用java。 我认为等待直到使用,但我不知道如何使用这个。或者如果有其他解决方案,请建议...

  • 问题内容: 我只是想知道,如何让浏览器在单击链接之前等待?我的目标是从动态网页抓取内容,内容是动态的,但我设法获取表单ID。唯一的问题是,提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在页面加载后立即开始单击链接(不是动态部分)。 有什么办法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用它,但是它暂停了所有操作,提交按钮在显示期间没有出现,但是在2-3秒后显示。 问题答案

  • 我只是想知道,如何在点击链接之前让浏览器等待?我的目标是我从一个动态网页抓取,内容是动态的,但我设法得到表单ID。唯一的问题是提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在加载页面(不是动态部分)时立即开始单击链接。 有没有办法让我的浏览器等待2-3秒,直到提交按钮出现?我试图使用但它暂停了一切,提交按钮在期间没有出现,而是在结束时在2-3秒后出现。