首页 > 解决方案 > 如何避免在硒测试中重复 Thread.sleep()?

问题描述

我正在用 Selenium 编写一些测试,但我遇到了一个烦人的问题。在我的代码中,Thread.sleep 每隔一行重复一次,因为我需要在方法中的每个函数之后短暂睡眠。如何避免。我不喜欢我的代码。看起来非常邋遢。我想改变这个重复的 Thread.sleep 以获得更优化的东西。这是我的代码:

@Test
public void shouldDownloadDriver() throws InterruptedException{

    driver.get("https://www.selenium.dev/");
    driver.manage().window().maximize();
    Thread.sleep(1500);
    driver.findElement(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span")).click();
    Thread.sleep(1500);
    driver.findElement(By.xpath("//*[@id=\"m-documentationgetting_started\"]/span")).click();
    Thread.sleep(1500);
    driver.findElement(By.xpath("//*[@id=\"m-documentationgetting_startedinstalling_browser_drivers\"]/span")).click();
    Thread.sleep(1500);
    ((JavascriptExecutor) driver).executeScript("window.open()");
    ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());

    driver.switchTo().window(tabs.get(1));
    driver.get("https://chromedriver.storage.googleapis.com/index.html");
    Thread.sleep(1500);
    driver.findElement(By.xpath("/html/body/table/tbody/tr[100]/td[2]/a")).click();
    Thread.sleep(1500);
    driver.findElement(By.xpath("/html/body/table/tbody/tr[4]/td[2]/a")).click();
    Thread.sleep(2000);
    driver.switchTo().window(tabs.get(0));
    Thread.sleep(3000);
    printSuccess();
}

标签: javaselenium

解决方案


visibilityOfElementLocated:一旦 WebElement 被定位并且可见,就返回它。

  • 检查元素是否存在于页面的 DOM 上并且可见的期望。可见性意味着元素不仅被显示,而且其高度和宽度都大于 0。
    WebDriverWait wait = new WebDriverWait(driver,10);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span")));
    driver.findElement(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span")).click();

presentOfElementLocated:如果元素存在于 DOM 上并且甚至不可见,则返回 WebElement。

  • 检查页面的 DOM 上是否存在元素的期望。这并不一定意味着该元素是可见的。
    WebDriverWait wait = new WebDriverWait(driver,10);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span")));
    driver.findElement(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span")).click();

推荐阅读