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

如何在Selenium Webdriver的显式等待语句中添加元素?

唐健
2023-03-14
    WebElement statusArr[]=new WebElement[6];
    String arr[] = new String[6];       
    for(int i=0;i<6;i++)
    {
        int j = i+1;
        statusArr[i] = driver.findElement(By.xpath("//*[@id='body']/ui-view/div[1]/div/div["+j+"]/a/table/tbody/tr[1]/td/div/i"));
        arr[i] = statusArr[i].getAttribute("title");
    }
    for(int i=0;i<6;i++)
    {
        if(arr[i].equals("Not Provided")||arr[i].equals("Incomplete")){
            wait.until(ExpectedConditions.visibilityOfNestedElementsLocatedBy(statusArr[i], null));
            statusArr[i].click();
            driver.navigate().back();
        }
    }

在这里,我试图等待元素加载,然后单击。但这是不可能的。我怎么能这么做?

共有1个答案

劳昊明
2023-03-14

visibilityOfNestedElementsLocatedBy文档

希望检查子WebElement作为父元素的一部分是否可见

nestedelementslocatedby(statusArr[i],null)中,您基本上是在等待null可见。请尝试visibilityOf

wait.until(ExpectedConditions.visibilityOf(statusArr[i]));

顺便说一下,当您单击元素并向后导航时,您将失去statusArr[]中的元素,并且您将不得不在每次迭代中重新定位它们。

 类似资料:
  • 问题内容: 我在下面的代码中添加了硬代码等待。如何使用显式等待。我想等到“用户名” WebElement出现。我的程序运行正常。我已经写了测试用例。 } 问题答案: 在 PageObjectModel中* 使用 PageFactory时 ,如果您希望该元素通过某些JavaScript加载并且可能已经不存在于页面中,则可以对普通的定位器工厂使用 Explicit Wait 支持,如下所示: * __

  • 我实际上有三个问题: Selenium WebDriver如何实现此 因为我们不能给无限睡眠的线程一个负值。 有没有更好的方法来实现无限等待? 我们在SeleniumWebDriver文档中看到了这一点

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

  • 问题内容: 这不起作用: 任何想法如何通过id将插入范围缩小到特定行? 问题答案: 在插入语句中,您将没有现有行来执行操作?您要插入新行,是否意味着要执行更新语句?

  • 问题内容: 我在用: 但是对于以下元素它仍然连续失败 我添加了等待代码: 隐式等待是否应该等到找到一个元素后再进行处理?如果我使用而不是我添加的代码,还会更好吗? 问题答案: TL; DR:始终使用显式等待。忘记隐式等待的存在。 以下是显式等待与隐式等待之间的区别的简要概述: 显式等待: 记录和定义的行为。 在硒的本地部分运行(以你的代码语言显示)。 可以在你能想到的任何条件下工作。 返回成功或超

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