我想要一个方法,它可以等待页面中的所有WebElement在java中加载(SeleniumWebDiver)

我想要一个方法,它可以等待页面中的所有WebElement在java中加载(SeleniumWebDiver),java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,或 或 或 我关心的是在网格中运行大量脚本时 由于等待问题,有些通过,有些失败 因此,我想要一个用户定义的方法,可以处理这种情况,即一个方法,应该等待一个页面的所有元素加载,以便可以有效地与显示错误的方法一起使用,如“无法定位元素”或“无法单击元素其他元素将收到单击”./您永远不应该使用计时器等待页面加载,因为您永远不知道渲染速度有多快,因此在这种情况下,我建议您采取两种方法: 使用Selenium的waitFor方法,在该方法中,驱动程序将等待Expected元素出现,默认情况下,您可以设置最

我关心的是在网格中运行大量脚本时 由于等待问题,有些通过,有些失败
因此,我想要一个用户定义的方法,可以处理这种情况,即一个方法,应该等待一个页面的所有元素加载,以便可以有效地与显示错误的方法一起使用,如“无法定位元素”或“无法单击元素其他元素将收到单击”./

您永远不应该使用计时器等待页面加载,因为您永远不知道渲染速度有多快,因此在这种情况下,我建议您采取两种方法:

  • 使用Selenium的waitFor方法,在该方法中,驱动程序将等待Expected元素出现,默认情况下,您可以设置最大等待时间,默认情况下为6秒。对于这种方法,您需要知道哪个元素表示页面已完全加载

    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.visibilityof(element));
    
  • 如果需要检查所有JS代码是否已加载,还可以在document.ready()JS中添加一行,在其中向主体添加隐藏元素,然后在测试中等待该属性

    waitFor(ExpectedConditions.presenceOfElementLocated(By.id("yourExpectedIdElement")));
    

  • 您永远不应该使用计时器等待页面加载,因为您永远不知道渲染速度有多快,因此在这种情况下,我建议您采用两种方法:

  • 使用Selenium的waitFor方法,在该方法中,驱动程序将等待Expected元素出现,默认情况下,您可以设置最大等待时间,默认情况下为6秒。对于这种方法,您需要知道哪个元素表示页面已完全加载

    WebDriverWait wait = new WebDriverWait(driver,30);
    wait.until(ExpectedConditions.visibilityof(element));
    
  • 如果需要检查所有JS代码是否已加载,还可以在document.ready()JS中添加一行,在其中向主体添加隐藏元素,然后在测试中等待该属性

    waitFor(ExpectedConditions.presenceOfElementLocated(By.id("yourExpectedIdElement")));
    

  • 你的问题不清楚。为什么“大量脚本”由于等待问题而失败
    .pageLoad
    是等待页面加载的正确方法-如果您获得某种竞争条件,则它不是从该函数返回页面加载的内联元素之前的状态。(OTOH,如果“元素”加载的原因是JS中运行的AJAX请求或JS添加内容-除了逐案处理外,没有其他方法可以完成您想要做的事情)我认为如果我们可以将所有WebElement存储在一个列表中,然后通过selenium等待进行迭代(显式/隐式)但这会影响脚本执行的总超时时间。您的问题不清楚。为什么“大量脚本”由于等待问题而失败
    .pageLoad
    是等待页面加载的正确方法-如果您获得某种竞争条件,则它不是从该函数返回页面加载的内联元素之前的状态。(OTOH,如果“元素”加载的原因是JS中运行的AJAX请求或JS添加内容-除了逐案处理外,没有其他方法可以完成您想要做的事情)我认为如果我们可以将所有WebElement存储在一个列表中,然后通过selenium等待进行迭代(显式/隐式)但这将影响脚本执行的总超时。
    waitFor(ExpectedConditions.presenceOfElementLocated(By.id("yourExpectedIdElement")));
    
    $document.ready(){
        //Add a hidden element to the body  
    }
    
    waitFor(ExpectedConditions.presenceOfElementLocated(By.id("createdElement")));