我正在使用webdriver运行一些GUI测试。我直接从Selenium IDE导出了一些测试。在此测试中,由于加载了下拉菜单,我不得不降低IDE的运行速度。如何在Selenium Webdriver中减慢测试速度?我已经放了
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);
而且它保持了高速运转。我知道sleep选项,但这不是我想要的,我想更改webdriver的默认执行速度。这是我的代码:
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.NoAlertPresentException; import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class ProfileCheck { private WebDriver driver; private String baseUrl; private boolean acceptNextAlert = true; private final StringBuffer verificationErrors = new StringBuffer(); @Before public void setUp() throws Exception { driver = new FirefoxDriver(); baseUrl = "http://localhost:8080"; driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); } @Test public void testProfileCheck() throws Exception { System.out.println("Test if profiles have access to the screen"); // Administrateur (has access) driver.get(baseUrl + "/Dashboard/index.jsp?lang=en"); driver.findElement(By.cssSelector("input[name=combo_profile]")).click(); driver.findElement( By.cssSelector(".x-boundlist-item:contains('Administrateur')")) .click(); driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en"); try { assertTrue(driver.getTitle().matches("^[\\s\\S]*ClientCutOff$")); } catch (Error e) { verificationErrors.append(e.toString()); } // Habilitation (no access) driver.get(baseUrl + "/Dashboard/index.jsp?lang=en"); driver.findElement(By.cssSelector("input[name=combo_profile]")).click(); driver.findElement( By.cssSelector(".x-boundlist-item:contains('Habilitation')")) .click(); driver.get(baseUrl + "/Params/ClientCutOff/index.jsp?lang=en"); try { assertFalse(driver.getTitle().matches("^[\\s\\S]*ClientCutOff$")); } catch (Error e) { verificationErrors.append(e.toString()); } } @After public void tearDown() throws Exception { try { Thread.sleep(5000); driver.quit(); } catch (Exception e) { } String verificationErrorString = verificationErrors.toString(); if (!"".equals(verificationErrorString)) { fail(verificationErrorString); } } private boolean isElementPresent(By by) { try { driver.findElement(by); return true; } catch (NoSuchElementException e) { return false; } } private boolean isAlertPresent() { try { driver.switchTo().alert(); return true; } catch (NoAlertPresentException e) { return false; } } private String closeAlertAndGetItsText() { try { Alert alert = driver.switchTo().alert(); String alertText = alert.getText(); if (acceptNextAlert) { alert.accept(); } else { alert.dismiss(); } return alertText; } finally { acceptNextAlert = true; } } }
不要使用sleep!
sleep
public static WebElement findElement(WebDriver driver, By selector, long timeOutInSeconds) { WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds); wait.until(ExpectedConditions.presenceOfElementLocated(selector)); return findElement(driver, selector); }