Java 如何在执行下一个操作之前等待页面加载?

Java 如何在执行下一个操作之前等待页面加载?,java,selenium,selenium-webdriver,xpath,webdriver,Java,Selenium,Selenium Webdriver,Xpath,Webdriver,我的页面包含高级搜索链接,在该链接中,填写搜索条件后,会出现一个加载程序,根据搜索条件加载我的结果,然后我需要执行删除 我的脚本运行得非常快,它不会等待加载程序消失,然后单击“删除”,这是不应该发生的,因为它们没有与我的搜索条件匹配的记录 我使用的代码- driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS) 任何能帮我的人都要等待这样的过程 如果有任何澄清,请告诉我。使用显式等待,请将其用作示例: WebDriverWait

我的页面包含高级搜索链接,在该链接中,填写搜索条件后,会出现一个加载程序,根据搜索条件加载我的结果,然后我需要执行删除

我的脚本运行得非常快,它不会等待加载程序消失,然后单击“删除”,这是不应该发生的,因为它们没有与我的搜索条件匹配的记录

我使用的代码-

driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS)

任何能帮我的人都要等待这样的过程


如果有任何澄清,请告诉我。

使用显式等待,请将其用作示例:

WebDriverWait wait = new WebDriverWait(driver, 20);
By element1 = By.xpath("path of element");

// get the button1  element
WebElement button1= wait.until(ExpectedConditions.presenceOfElementLocated(element1 ));

使用此示例首先我必须等待
关于
链接可点击,因此我必须使用显式等待,然后等待
我们的产品
链接可点击

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("http://www.google.com");
WebDriverWait wait =new WebDriverWait(driver, 20);
WebElement aboutLink= wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.linkText("About"))));

aboutLink.click();

WebElement producttLink= wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//a[text()='Our products']"))));
producttLink.click();

如果您知道加载器的元素(例如,
classname=“spinner
”),您还可以等待该元素的不可见性

请尝试以下代码:

WebDriverWait wait = new WebDriverWait(driver, 20);
By loadElement = By.className("spinner");

//wait until loader is gone
WebDriverWait.until(ExpectedConditions.invisibilityOfElementLocated(loadElement));

由于在填充搜索条件时会出现一个加载程序,它会根据搜索条件加载结果,然后您需要执行删除,因此我们有两种方法来解决此问题

  • 在第一种方法中,我们将等待加载程序
    消失
    ,然后单击所需的
    WebElement
    删除
    。我们将通过
    WebDriverWait
    实施此方法,并将
    ExpectedConditions
    设置为
    invisibilityOfElementLocated
    ,如下所示:

    WebDriverWait wait10 = new WebDriverWait(driver, 10);
    wait10.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("xpath_of_loader")));
    driver.findElement(By.xpath("xpath_delete_button")).click();
    
    WebDriverWait wait11 = new WebDriverWait(driver, 10);
    WebElement element11 = wait11.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_delete_button")));
    element11.click();
    
  • 在第二种方法中,我们将等待
    WebElement
    as delete按钮可单击,然后单击预期的
    WebElement
    delete
    。我们将通过
    WebDriverWait
    实施此方法,并将
    ExpectedConditions
    设置为
    elementtobelickable
    ,如下所示:

    WebDriverWait wait10 = new WebDriverWait(driver, 10);
    wait10.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("xpath_of_loader")));
    driver.findElement(By.xpath("xpath_delete_button")).click();
    
    WebDriverWait wait11 = new WebDriverWait(driver, 10);
    WebElement element11 = wait11.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_delete_button")));
    element11.click();
    

duplicate@RajuSharma由于问题未标记为正确答案,我是否应将其视为重复。我应等待哪个元素。下一个操作,即。,。删除我要执行的操作或单击“高级搜索”时删除。如果您的操作卡住,您可以使用它,我在单击“删除”之前使用过,但它不起作用:(我能给你一个例子吗?试试这个,我添加了一个新的答案。你能解释我吗,为什么你要对同一个问题给出多个答案。这很烦人。请只用不同的解决方案发布一个答案。然后你可以将你的答案与正确的文本合并。不像其他答案。