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

Selenium Java:等待直到可单击

唐兴发
2023-03-14

我被困在一个有硒等待的情况下。我正在使用硒爪哇和cucumber。点击一个按钮,一个新的页面加载,但内容还不能点击。当页面加载到背面时,将显示一个灰色屏幕阻止器,以便在加载整个页面之前使其不可编辑。所以我不能使用waitforpageload或wait for element使其可见,因为它们都返回true,因为元素在后台可用。我尝试使用一个条件来检查元素是否可点击,以确保页面完全加载。但那也没用。一旦页面加载到后台,将执行进一步的检查,测试以错误结束。

我也试过waituntilelementis visible:

public static void waitUntilTextIsInvisible(final String text, final int timeoutInSecs)
    {
        if (StringUtils.isBlank(text))
        {
            return;
        }

        try
        {
            (new WebDriverWait(_webDriver, timeoutInSecs))
                    .until(new ExpectedCondition<Boolean>()
                    {
                        @Override
                        public Boolean apply(final WebDriver d)
                        {
                            return SeleniumUtils.findElementsContainingText(text, d).size() == 0;
                        }
                    });
        }
        catch (TimeoutException e)
        {
            LOG.error("Exception on page " + _webDriver.getCurrentUrl()
                    + " waiting for text " + text + " to be visible");
            throw e;
        }
    }

-拉克希米。

共有1个答案

单于智
2023-03-14

您可以在页面加载和灰色屏幕阻止程序出现时暂停浏览器。获取它的xpath并等待它不再存在。如果有帮助就告诉我。

 类似资料:
  • 问题内容: 如何让我的代码等待,直到DispatchQueue中的任务完成?是否需要任何CompletionHandler或其他东西? 我正在使用Xcode 8.2并在Swift 3中编写。 问题答案: 使用s可以实现这一点。您可以在群组和通话达到平衡时得到通知: 或者您可以等待: 注意 :阻止当前队列(在您的情况下可能是主队列),因此您必须在另一个队列上(如上面的示例代码中)以避免 死锁 。

  • 我有一个Selenium脚本(Python),它单击一个回复按钮以显示类anonemail。类anonemail显示所需的时间各不相同。因此,在元素出现之前,我必须使用sleep。 我想等到类已经出现,而不是使用睡眠。我听说过等待命令,但我不知道如何使用它们。 这是我到目前为止所拥有的:

  • 问题内容: 我在Python 2.7中使用selenium,并且有以下代码,但是我正在寻找一种更有效的方法: 问题答案: 您无需使用一段时间。它已经等待您在WebDriverWait()函数中显示的时间。

  • 我使用这段代码点击下拉列表: 我得到错误可能是因为有一个显示登录栏的层。之后,该元素被禁用,代码抛出异常。 是否可以实现一个等待元素不被禁用的listen?

  • 问题内容: 我需要等待,直到创建了一个文件,然后将其读入。我有以下代码,但请确保它不起作用: 有什么想法吗? 问题答案: 一个简单的实现可以是: 每次检查后,您都需要等待一段时间,然后在路径存在时读取文件。如果从未创建该文件,则可以停止该脚本,但有例外。您还应该检查该路径是否位于该文件之后,以避免某些不必要的异常。

  • 我使用等待块使代理等待,直到条件为真(资源空闲)。我尝试在等待块“输入”字段中写入以下内容: 问题是,如果资源变得繁忙,代理将被困在等待块中,不会被释放,即使条件再次变为真。然后,当下一个代理进入等待块时(条件再次变为真),它将传递原本在它前面的代理,但现在被卡住了。有办法解决这个问题吗?