java - 如何避免在硒测试中重复 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();
}
解决方案
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();
推荐阅读
- c# - 在哪里放置 c# 代码在关闭 Outlook 时运行
- postsharp - 如何通过 OnMethodBoundaryAspect 跟踪传递的参数?
- docker - Coredns 无法访问主机名称服务器
- dart - TextField focus/unfocus 强制重新创建我的 BloC
- jenkins - Jenkins 没有在 Linux ( redhat ) 上作为服务运行
- ubuntu - 如何在 xubuntu 18.04 中创建桌面快捷方式?
- java - Java while循环有一定的时间
- html - 当背景大小为“覆盖”时使用百分比
- scala - 将字符串表达式评估为 Scala 中的代码
- javascript - NodeJS 中请求的资源上不存在“Access-Control-Allow-Origin”标头