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

使用Selenium webdriver等待元素

黄流觞
2023-03-14

等待元素出现在网页上的最佳方式是什么?我已经读到,我们可以使用隐式等待和功能,如网络驱动程序wait,流利的等待等,最后但不是最不重要的线程.sleep()...我使用最多,但想停止使用。

我的场景:

用户登录到网站…网站检查凭据,并以叠加的形式向用户提供报价(一种弹出窗口,但不是单独的窗口)。我需要验证叠加图上的文字。用户登录和显示覆盖之间存在时间间隔。最好的方法是什么,以便硒只等待元素不可见的时间。由于覆盖不是单独的页面,而是主页的一部分,因此隐式等待根本不起作用。

欢迎所有建议…:)

共有3个答案

景信瑞
2023-03-14
public boolean waitForElement(WebElement ele, String xpath, int seconds) throws InterruptedException{
    //returns true if the xpath appears in the webElement within the time
    //false when timed out
    int t=0;
    while(t<seconds*10){
        if(ele.findElements(By.xpath(xpath)).size()>0)
            return true;
        else{
            Thread.sleep(100);
            t++;
            continue;
        }
    }       
    System.out.println("waited for "+seconds+"seconds. But couldn't find "+xpath+ " in the element specified");
    return false;
}
逄烨
2023-03-14
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.elementToBeClickable(By.id("optionsBuilderSelect_input")));

我是一个专业的刮刀(http://nitinsurana.com)我已经用硒编写了30个软件,我从来没有遇到过任何这样的问题,无论如何,上面是一个示例代码

我所能想到的是,直到条件必须检查,因为很多时候元素已经可见,但它们是不可点击的等等。我想你应该尝试不同的选择,我希望你会找到所需的一个。

叶冥夜
2023-03-14

始终从使用隐式等待开始。我认为Selenium默认为5秒,因此如果您使用驱动程序。findElement(),其含义是它将等待最多5秒。那应该可以了。如果您正在经历一个时间不可预测的场景,则使用FluentWait(具有相同的5秒超时),但也使用.ignoring方法,并将其包装在while循环中。以下是基本思路:

int tries=0;
while ( tries < 3 ) {
  //fluent wait (with .ignoring) inside here
  tries ++1;
}
 类似资料:
  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

  • 问题内容: 我正在寻找类似于在单击元素之前检查元素是否已显示的内容。我认为可以通过完成此操作,因此我使用了以下方法: 然后点击 不幸的是,有时它等待元素,有时不等待。我寻找了一段时间,找到了这个解决方案: 它等待一切正常,但是在超时之前必须等待10次5、50秒。有点多。因此,我将隐式等待时间设置为1秒,直到现在一切都还不错。因为现在有些事情在超时前等待10秒,而另一些事情在1秒之后超时。 如何覆盖

  • 它一直在等待,但在超时之前,它必须等待10乘以5,50秒。有点多。所以我将隐含的等待设置为1秒,直到现在看起来一切都很好。因为现在有些事情在超时前等待10秒,但有些事情在1秒后超时。 如何在代码中覆盖等待元素的存在/可见性?任何暗示都是可以察觉的。

  • 我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?

  • 我正在尝试在另一个画布上添加画布–如何使此函数等待启动,直到创建第一个画布?

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