【问题标题】:How to avoid repeating Thread.sleep() in selenium test?如何避免在硒测试中重复 Thread.sleep()?
【发布时间】:2021-09-17 14:27:40
【问题描述】:

我正在用 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();
}

【问题讨论】:

  • 可以使用WebDriverWait Wait&lt;WebDriver&gt; wait = new WebDriverWait(webDriver, Duration.ofSeconds(1500); wait.until(ExpectedConditions.visibilityOf(By.xpath("//*[@id=\"main_navbar\"]/ul/li[4]/a/span"));
  • 发布了答案。请查看并回复。

标签: java selenium


【解决方案1】:

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

presenceOfElementLocated:如果元素存在于 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    • 2021-03-29
    • 2019-06-20
    • 2018-02-03
    相关资源
    最近更新 更多