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

时间:2017-08-30 04:37:07

标签: java selenium selenium-webdriver xpath webdriver

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

我的脚本运行得如此之快,以至于它不会等待加载程序消失并点击删除,这不应该发生,因为它们没有符合我的搜索条件的记录。

我使用的代码 -

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

任何可以帮助我等待这种过程的人。

如有任何澄清,请通知我。

4 个答案:

答案 0 :(得分:1)

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

  • 在第一种方法中,我们会等待加载程序disappear,然后点击预定的WebElementDelete。我们将通过WebDriverWaitExpectedConditions设置为invisibilityOfElementLocated来实现此方法,如下所示:

    WebDriverWait wait10 = new WebDriverWait(driver, 10);
    wait10.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("xpath_of_loader")));
    driver.findElement(By.xpath("xpath_delete_button")).click();
    
  • 在第二种方法中,我们会等待WebElement删除按钮可点击,然后点击预定的WebElementDelete。我们将通过WebDriverWaitExpectedConditions设置为elementToBeClickable来实现此方法,如下所示:

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

首先使用此作为示例我必须等待About链接可点击,因此我使用显式等待,然后等待Our products链接可点击。

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();

答案 3 :(得分:0)

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

请尝试以下代码:

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

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