selenium fluentwait java实例
本文转自:http://www.programcreek.com/java-api-examples/index.php?api=org.openqa.selenium.support.ui.FluentWait
java代码实例org.openqa.selenium.support.ui.fluentwait
以下是票数最高的例子展示了如何使用org.openqa.selenium.support.ui.fluentwait。这些示例是从开放源代码项目中提取的。
Example 1
Project: abmash File: WaitFor.java View source code 7 votes vote down vote up
/**
* Waits until element is found. Useful for waiting for an AJAX call to complete.
*
* @param query the element query
* @throws TimeoutException
*/
public void query(Query query) throws TimeoutException {
// WebDriverWait wait = new WebDriverWait(browser.getWebDriver(), timeout);
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(browser.getWebDriver())
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS); // start waiting for given element
wait.until(new ElementWaitCondition(browser, query));
} Example 2
Project: seauto File: HtmlView.java View source code 7 votes vote down vote up
/**
* Waits for an element to appear on the page before returning. Example:
* WebElement waitElement =
* fluentWait(By.cssSelector(div[class='someClass']));
*
* @param locator
* @return
*/
protected WebElement waitForElementToAppear(final By locator)
{
Wait<WebDriver> wait = new FluentWait<WebDriver>(webDriver).withTimeout(30, TimeUnit.SECONDS).pollingEvery(5, TimeUnit.SECONDS).ignoring(NoSuchElementException.class); WebElement element = null;
try {
element = wait.until(new Function<WebDriver, WebElement>() { @Override
public WebElement apply(WebDriver driver)
{
return driver.findElement(locator);
}
});
}
catch (TimeoutException e) {
try {
// I want the error message on what element was not found
webDriver.findElement(locator);
}
catch (NoSuchElementException renamedErrorOutput) {
// print that error message
renamedErrorOutput.addSuppressed(e);
// throw new
// NoSuchElementException("Timeout reached when waiting for element to be found!"
// + e.getMessage(), correctErrorOutput);
throw renamedErrorOutput;
}
e.addSuppressed(e);
throw new NoSuchElementException("Timeout reached when searching for element!", e);
} return element;
} Example 3
Project: records-management File: BrowseList.java View source code 7 votes vote down vote up
/**
* Wait for all the expected rows to be there
*/
private void waitForRows()
{
// get the number of expected items
int itemCount = getItemCount();
if (itemCount != 0)
{
// wait predicate
Predicate<WebDriver> waitForRows = (w) ->
{
List<WebElement> rows = w.findElements(rowsSelector);
return (itemCount == rows.size());
}; // wait until we have the expected number of rows
new FluentWait<WebDriver>(Utils.getWebDriver())
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.until(waitForRows);
}
} Example 4
Project: automation-test-engine File: AbstractElementFind.java View source code 6 votes vote down vote up
/**
* Creates the wait.
*
* @param driver
* the driver
*/
public void createWait(WebDriver driver) {
wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
} Example 5
Project: thucydides File: WhenTakingLargeScreenshots.java View source code 6 votes vote down vote up
private void waitUntilFileIsWritten(File screenshotFile) {
Wait<File> wait = new FluentWait<File>(screenshotFile)
.withTimeout(10, TimeUnit.SECONDS)
.pollingEvery(250, TimeUnit.MILLISECONDS); wait.until(new Function<File, Boolean>() {
public Boolean apply(File file) {
return file.exists();
}
});
} Example 6
Project: vaadin-for-heroku File: SessionTestPage.java View source code 6 votes vote down vote up
public SessionTestPage(final WebDriver driver) {
this.driver = driver;
wait = new FluentWait<WebDriver>(driver).withTimeout(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class,
ElementNotFoundException.class); } Example 7
Project: seleniumQuery File: SeleniumQueryFluentWait.java View source code 6 votes vote down vote up
/**
* @since 0.9.0
*/
private <T> T fluentWait(SeleniumQueryObject seleniumQueryObject, Function<By, T> function, String reason) {
try {
return new FluentWait<>(seleniumQueryObject.getBy())
.withTimeout(waitUntilTimeout, TimeUnit.MILLISECONDS)
.pollingEvery(waitUntilPollingInterval, TimeUnit.MILLISECONDS)
.ignoring(StaleElementReferenceException.class)
.ignoring(NoSuchElementException.class)
.until(function);
} catch (TimeoutException sourceException) {
throw new SeleniumQueryTimeoutException(sourceException, seleniumQueryObject, reason);
}
} Example 8
Project: objectfabric File: Selenium.java View source code 6 votes vote down vote up
private WebElement fluentWait(final By locator) {
Wait<WebDriver> wait = new FluentWait<WebDriver>(_driver) //
.withTimeout(5, TimeUnit.SECONDS) //
.pollingEvery(100, TimeUnit.MILLISECONDS) //
.ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
}); return foo;
} Example 9
Project: redsniff File: RedsniffWebDriverTester.java View source code 6 votes vote down vote up
/**
* Wait until the supplied {@link FindingExpectation} becomes satisfied, or throw a {@link TimeoutException}
* , using the supplied {@link FluentWait}
* This should only be done using a wait obtained by calling {@link #waiting()} to ensure the correct arguments are passed.
*
* @param expectation
* @param wait
* @return
*/
public <T, E, Q extends TypedQuantity<E, T>> T waitFor(
final FindingExpectation<E, Q, SearchContext> expectation, FluentWait<WebDriver> wait) {
try {
return new Waiter(wait).waitFor(expectation);
}
catch(FindingExpectationTimeoutException e){
//do a final check to get the message unoptimized
ExpectationCheckResult<E, Q> resultOfChecking = checker.resultOfChecking(expectation);
String reason;
if(resultOfChecking.meetsExpectation())
reason = "Expectation met only just after timeout. At timeout was:\n" + e.getReason();
else {
reason = resultOfChecking.toString();
//if still not found first check there isn't a page error or something
defaultingChecker().assertNoUltimateCauseWhile(newDescription().appendText("expecting ").appendDescriptionOf(expectation));
}
throw new FindingExpectationTimeoutException(e.getOriginalMessage(), reason, e);
}
} Example 10
Project: yatol File: AbstractWebFixture.java View source code 6 votes vote down vote up
/**
* Searches for a given text on the page.
*
* @param text
* to be searched for
* @return {@code true} if the {@code text} is present on the page,
* {@code false} otherwise
*/
public boolean checkTextIsPresentOnPage(final String text) {
// waitForPage();
try {
int interval = (int) Math.floor(Math.sqrt(timeout));
Wait<WebDriver> wait = new FluentWait<WebDriver>(webDriver).withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(interval, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class, StaleElementReferenceException.class);
return wait.until(new ExpectedCondition<Boolean>() { @Override
public Boolean apply(WebDriver driver) {
String source = webDriver.getPageSource();
source = source.replaceFirst("(?i:<HEAD[^>]*>[\\s\\S]*</HEAD>)", "");
return source.contains(text.trim());
}
});
} catch (Exception e) {
return false;
}
} Example 11
Project: seleniumcapsules File: TicketflyTest.java View source code 6 votes vote down vote up
@Test
public void changeLocationUsingExplicitWaitLambda() {
WebDriver driver = new ChromeDriver();
driver.get("http://www.ticketfly.com");
driver.findElement(linkText("change location")).click(); WebDriverWait webDriverWait = new WebDriverWait(driver, 5); WebElement location = webDriverWait.until(new Function<WebDriver, WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id("location"));
}
}); FluentWait<WebElement> webElementWait
= new FluentWait<WebElement>(location)
.withTimeout(30, SECONDS)
.ignoring(NoSuchElementException.class);
WebElement canada = webElementWait.until(new Function<WebElement, WebElement>() {
@Override
public WebElement apply(WebElement element) {
return location.findElement(linkText("CANADA"));
}
});
canada.click();
WebElement allCanada = webElementWait.until(new Function<WebElement, WebElement>() {
@Override
public WebElement apply(WebElement element) {
return location.findElement(linkText("Ontario"));
}
});
allCanada.click();
assertEquals(0, driver.findElements(linkText("Ontario")).size());
assertEquals("Ontario", driver
.findElement(By.xpath("//div[@class='tools']/descendant::strong")).getText());
} Example 12
Project: nuxeo-distribution File: Select2WidgetElement.java View source code 6 votes vote down vote up
/**
* Do a wait on the select2 field.
*
* @throws TimeoutException
*
* @since 6.0
*/
private void waitSelect2()
throws TimeoutException {
Wait<WebElement> wait = new FluentWait<WebElement>(
!mutliple ? driver.findElement(By.xpath(S2_SINGLE_INPUT_XPATH))
: element.findElement(By.xpath(S2_MULTIPLE_INPUT_XPATH))).withTimeout(
SELECT2_LOADING_TIMEOUT,
TimeUnit.SECONDS).pollingEvery(
100,
TimeUnit.MILLISECONDS).ignoring(
NoSuchElementException.class);
Function<WebElement, Boolean> s2WaitFunction = new Select2Wait();
wait.until(s2WaitFunction);
} Example 13
Project: gxt-driver File: Tree.java View source code 6 votes vote down vote up
public void waitForLoaded(long duration, TimeUnit unit) {
new FluentWait<WebDriver>(getDriver())
.withTimeout(duration, unit)
.ignoring(NotFoundException.class)
.until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
return !methods.isLoading(getWidgetElement(), getElement());
}
});
} Example 14
Project: gwt-driver File: GwtWidgetFinder.java View source code 6 votes vote down vote up
public W waitFor(long duration, TimeUnit unit) {
return new FluentWait<WebDriver>(driver)
.withTimeout(duration, unit)
.ignoring(NotFoundException.class)
.until(new Function<WebDriver, W>() {
@Override
public W apply(WebDriver webDriver) {
return done();
}
});
} Example 15
Project: nuxeo File: Select2WidgetElement.java View source code 6 votes vote down vote up
/**
* Do a wait on the select2 field.
*
* @throws TimeoutException
* @since 6.0
*/
private void waitSelect2() throws TimeoutException {
Wait<WebElement> wait = new FluentWait<WebElement>(
!mutliple ? driver.findElement(By.xpath(S2_SINGLE_INPUT_XPATH))
: element.findElement(By.xpath(S2_MULTIPLE_INPUT_XPATH))).withTimeout(SELECT2_LOADING_TIMEOUT,
TimeUnit.SECONDS).pollingEvery(100, TimeUnit.MILLISECONDS).ignoring(
NoSuchElementException.class);
Function<WebElement, Boolean> s2WaitFunction = new Select2Wait();
wait.until(s2WaitFunction);
} Example 16
Project: selenium-addon File: SeleniumActions.java View source code 6 votes vote down vote up
/**
* Clicks the button located at the given table at the given row and column. It additionally expects it to be secured with a
* ConfirmDia?og (https://vaadin.com/directory#addon/confirmdialog).
*/
public void clickTableButtonWithConfirmation(String tableName, int row, int col) {
clickTableButton(tableName, row, col);
ConfirmDialogPO popUpWindowPO = new ConfirmDialogPO(driver);
popUpWindowPO.clickOKButton();
FluentWait<WebDriver> wait = new WebDriverWait(driver, WaitConditions.LONG_WAIT_SEC, WaitConditions.SHORT_SLEEP_MS)
.ignoring(StaleElementReferenceException.class);
wait.until(new ExpectedCondition<Boolean>() { @Override
public Boolean apply(WebDriver driver) {
List<WebElement> findElements = driver.findElements(By.xpath("//div[contains(@class, 'v-window ')]"));
return findElements.size() == 0;
}
});
WaitConditions.waitForShortTime();
} Example 17
Project: constellation File: CstlClientTestCase.java View source code 5 votes vote down vote up
/**
* test wms creation page navigation
*/
// @Test
// @RunAsClient
public void testCreateWMS() {
driver.get(deploymentURL.toString() + "webservices");
WebElement createService = driver.findElement(By.id("createservice"));
assertNotNull(createService); //wms button test visibility
WebElement wmschoice = driver.findElement(By.id("wmschoice"));
assertFalse(wmschoice.isDisplayed());
createService.click();
assertTrue(wmschoice.isDisplayed()); //go to form first page
wmschoice.click(); //Test visibility parts.
WebElement description = driver.findElement(By.id("description"));
final WebElement metadata = driver.findElement(By.id("metadata"));
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class); wait.until(new Function<WebDriver, Boolean>() {
@Override
public Boolean apply(org.openqa.selenium.WebDriver webDriver) {
return metadata.isDisplayed()==false;
}
}); assertTrue(description.isDisplayed());
assertFalse(metadata.isDisplayed()); //add forms data
WebElement createtionWmsForm = driver.findElement(By.tagName("form"));
createtionWmsForm.findElement(By.id("name")).sendKeys("serviceName");
createtionWmsForm.findElement(By.id("identifier")).sendKeys("serviceIdentifier");
createtionWmsForm.findElement(By.id("keywords")).sendKeys("service keywords");
createtionWmsForm.findElement(By.id("inputDescription")).sendKeys("service Description");
createtionWmsForm.findElement(By.id("inputDescription")).sendKeys("service Description");
createtionWmsForm.findElement(By.id("v130")).click(); driver.findElement(By.id("nextButton")).click(); new WebDriverWait(driver, 20).until(new ExpectedCondition<Object>() {
@Override
public Object apply(org.openqa.selenium.WebDriver webDriver) {
if(webDriver.findElement(By.id("contactName")).isDisplayed())
return webDriver.findElement(By.id("contactName"));
else return null;
}
});
// contact information & address
createtionWmsForm.findElement(By.id("contactName")).sendKeys("contact Name");
createtionWmsForm.findElement(By.id("contactOrganisation")).sendKeys("contact Organisation");
createtionWmsForm.findElement(By.id("contactPosition")).sendKeys("contact position");
createtionWmsForm.findElement(By.id("contactPhone")).sendKeys("contact Phone");
createtionWmsForm.findElement(By.id("contactFax")).sendKeys("contact Fax");
createtionWmsForm.findElement(By.id("contactEmail")).sendKeys("contact eMail");
createtionWmsForm.findElement(By.id("contactAddress")).sendKeys("contact Adress");
createtionWmsForm.findElement(By.id("contactCity")).sendKeys("contact City");
createtionWmsForm.findElement(By.id("contactState")).sendKeys("contact State");
createtionWmsForm.findElement(By.id("contactPostcode")).sendKeys("contact PostCode");
createtionWmsForm.findElement(By.id("contactCountry")).sendKeys("contact Country"); //constraint
createtionWmsForm.findElement(By.id("fees")).sendKeys("fees");
createtionWmsForm.findElement(By.id("accessConstraints")).sendKeys("access Constraint");
createtionWmsForm.findElement(By.id("layerLimit")).sendKeys("layer Limit");
createtionWmsForm.findElement(By.id("maxWidth")).sendKeys("max Width");
createtionWmsForm.findElement(By.id("maxHeight")).sendKeys("max Height");
createtionWmsForm.submit(); } Example 18
Project: NYU-Bobst-Library-Reservation-Automator-Java File: Automator.java View source code 5 votes vote down vote up
/**
* Main function to run the Automator
* @param args Allows 1 argument for the file name of the user logins in .csv format
*/
public static void main(String[] args)
{
// Turns off annoying htmlunit warnings
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF); // Setting inheritance stuff
Properties settings = new Properties();
InputStream input = null; // Settings variables to be changed
int timeDelta = 90;
String description = "NYU Phi Kappa Sigma Study Session";
String floorNumber = "LL1";
String roomNumber = "20";
String userLoginsFilePath = "userLogins.csv"; try
{
input = new FileInputStream("settings");
settings.load(input); // Initializes each value from the defaults to the values in the settings file
timeDelta = Integer.parseInt(settings.getProperty("timeDelta"));
description = settings.getProperty("description");
floorNumber = settings.getProperty("floorNumber");
roomNumber = settings.getProperty("roomNumber");
userLoginsFilePath = settings.getProperty("userLoginFile");
}
catch (IOException ex)
{System.err.println("Settings file could not be read correctly");}
finally
{
if (input != null)
{
try
{input.close();}
catch (IOException e)
{System.err.println("Error trying to close stream from settings file");}
}
} // Gets the reservation date only once at the start
LocalDate currentDate = LocalDate.now();
LocalDate reservationDate = currentDate.plusDays(timeDelta); // Date in string format
String reservationYear = Integer.toString(reservationDate.getYear());
String reservationMonth = ""; try
{reservationMonth = toMonth(Integer.toString(reservationDate.getMonthValue()));}
catch (MonthException e)
{System.out.println(e.getMessage());} String reservationDay = Integer.toString(reservationDate.getDayOfMonth()); // Logging capability stuff
File logs = null; // Error logging
PrintStream pErr = null;
FileOutputStream fErr = null;
File errors = null; // Status logging
PrintStream pOut = null;
FileOutputStream fOut = null;
File status = null; try
{
// Creates the directory hierarchy
logs = new File("logs");
if (!logs.isDirectory())
logs.mkdir();
status = new File("logs/status");
if (!status.isDirectory())
status.mkdir();
errors = new File("logs/errors");
if (!errors.isDirectory())
errors.mkdir(); fOut = new FileOutputStream(
"logs/status/" + reservationDate.toString() + ".status");
fErr = new FileOutputStream(
"logs/errors/" + reservationDate.toString() + ".err");
pOut = new PrintStream(fOut);
pErr = new PrintStream(fErr);
System.setOut(pOut);
System.setErr(pErr);
}
catch (FileNotFoundException ex)
{System.err.println("Couldn't find the logging file");} // Checks for user logins .csv file existence
File userLogins = new File(userLoginsFilePath); try
{
if (!userLogins.exists() || (userLogins.isDirectory()))
throw new IOException("userLogins.csv does not exist, or is a directory");
}
catch (IOException e)
{System.err.println(e.getMessage());} // Builds an array of users based off of .csv
// Opens file stream
FileReader fr = null;
BufferedReader br = null;
StringTokenizer st = null;
ArrayList<User> users = new ArrayList<User>();
try {
fr = new FileReader(userLogins);
br = new BufferedReader(fr);
boolean lineSkip = true; for (String line; (line = br.readLine()) != null; )
{
if (lineSkip)
lineSkip = false;
else
{
boolean timestampSkip = true;
st = new StringTokenizer(line, ",");
while (st.hasMoreTokens())
{
// Advances past the timeStamp
if (timestampSkip)
{
timestampSkip = false;
st.nextToken();
}
else
{
String username = st.nextToken();
String password = st.nextToken(); // Advances past the years until graduation
while (st.hasMoreTokens())
st.nextToken();
users.add(new User(username, password));
}
} // End of while loop
} // End of else
} // End of the for loop
} // End of the try block
catch (IOException e1)
{System.err.println("File could not be found");}
finally
{
try
{
fr.close();
br.close();
}
catch (IOException e)
{System.err.println("File error while trying to close file");}
} // Start of going through the registration with each user
for (int i = 0; i < users.size(); ++i)
{
// Resets the AM at the end of the loop, since it's a static variable
AM_PM = true; // Builds a browser connection
WebDriver browser = new FirefoxDriver();
browser.manage().window().maximize(); //HtmlUnitDriver browser = new HtmlUnitDriver(BrowserVersion.CHROME);
//browser.setJavascriptEnabled(true); try
{
// Starts automation for user
System.out.println("User number: " + i + " status: starting"); browser.get("https://login.library.nyu.edu/pds?func=load-login&institute=NYU&calling_system=https:"
+ "login.library.nyu.edu&url=https%3A%2F%2Frooms.library.nyu.edu%2Fvalidate%3Freturn_url%3Dhttps"
+ "%253A%252F%252Frooms.library.nyu.edu%252F%26https%3A%2F%2Flogin.library.nyu.edu_action%3Dnew%2"
+ "6https%3A%2F%2Flogin.library.nyu.edu_controller%3Duser_sessions"); // Sleep until the div we want is visible or 15 seconds is over
FluentWait<WebDriver> fluentWait = new FluentWait<WebDriver>(browser)
.withTimeout(20, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class); fluentWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@id='shibboleth']"))); browser.findElement(By.xpath("//div[@id='shibboleth']/p[1]/a")).click(); fluentWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//form[@id='login']"))); // Now we're at the login page
WebElement username = browser.findElement(By.xpath("//form[@id='login']/input[1]"));
WebElement password = browser.findElement(By.xpath("//form[@id='login']/input[2]")); // Signs into the bobst reserve with the user's username and password
username.sendKeys(users.get(i).getUsername());
password.sendKeys(users.get(i).getPassword());
browser.findElement(By.xpath("//form[@id='login']/input[3]")).click(); if (browser.getCurrentUrl().equals("https://shibboleth.nyu.edu:443/idp/Authn/UserPassword") ||
(browser.getCurrentUrl().equals("https://shibboleth.nyu.edu/idp/Authn/UserPassword")))
throw new InvalidLoginException("User " + i + " had invalid login credentials"); // START OF FUCKING AROUND WITH THE DATEPICKER
// Error checking that rooms.library.nyu.edu pops up
int count = 0;
while ((!browser.getCurrentUrl().equals("https://rooms.library.nyu.edu/")) && (count < 5))
{
browser.navigate().refresh();
Thread.sleep(5000);
fluentWait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='well well-sm']")));
++count;
} browser.findElement(By.xpath(
"//form[@class='form-horizontal']/div[@class='well well-sm']" +
"/div[@class='form-group has-feedback']/div[@class='col-sm-6']/input[1]"
)).click(); Thread.sleep(5000); // Checks the month and year, utilizes a wait for the year for the form to pop up
WebElement datePickerYear = fluentWait.until(
ExpectedConditions.presenceOfElementLocated(By.xpath(
"//div[@id='ui-datepicker-div']/div[@class='ui-datepicker-group ui-datepicker-group-first']/" +
"div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-left']/" +
"div[@class='ui-datepicker-title']/span[@class='ui-datepicker-year']"
))); String datePickerYearText = datePickerYear.getText(); WebElement datePickerMonth = browser.findElement(By.xpath(
"//div[@id='ui-datepicker-div']/div[@class='ui-datepicker-group ui-datepicker-group-first']/" +
"div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-left']/" +
"div[@class='ui-datepicker-title']/span[@class='ui-datepicker-month']"
));
String datePickerMonthText = datePickerMonth.getText(); // Alters year
while (!datePickerYearText.equals(reservationYear))
{
// Right clicks the month until it is the correct year
browser.findElement(By.className("ui-icon-circle-triangle-e")).click(); // Updates the datepicker year
datePickerYear = browser.findElement(By.xpath(
"//div[@id='ui-datepicker-div']/div[@class='ui-datepicker-group ui-datepicker-group-first']/" +
"div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-left']/" +
"div[@class='ui-datepicker-title']/span[@class='ui-datepicker-year']"
));
datePickerYearText = datePickerYear.getText();
} // ALters month
while (!datePickerMonthText.equals(reservationMonth))
{
// Right clicks the month until it is the correct month
browser.findElement(By.className("ui-icon-circle-triangle-e")).click(); // Updates the datepicker month
datePickerMonth = browser.findElement(By.xpath(
"//div[@id='ui-datepicker-div']/div[@class='ui-datepicker-group ui-datepicker-group-first']/" +
"div[@class='ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-left']/" +
"div[@class='ui-datepicker-title']/span[@class='ui-datepicker-month']"
));
datePickerMonthText = datePickerMonth.getText();
} // At this point, we are on the correct year & month. Now we select the date
browser.findElement(By.linkText(reservationDay)).click(); // END OF THE FUCKING DATEPICKER // Selects the start time
int timeStart = getTime(i); Select reservationHour = new Select(browser.findElement(By.cssSelector("select#reservation_hour")));
reservationHour.selectByValue(Integer.toString(timeStart)); Select reservationMinute = new Select(browser.findElement(By.cssSelector("select#reservation_minute")));
reservationMinute.selectByValue("0"); // Selects AM/PM
Select reservationAMPM = new Select(browser.findElement(By.cssSelector("select#reservation_ampm")));
if (AM_PM)
reservationAMPM.selectByValue("am");
else
reservationAMPM.selectByValue("pm"); // Selects the time length
Select timeLength = new Select(browser.findElement(By.cssSelector("select#reservation_how_long")));
timeLength.selectByValue("120"); // Generates the room/time picker
browser.findElement(By.xpath("//button[@id='generate_grid']")).click(); WebElement alert = null;
// Checks if the user has already reserved a room for the day
try
{
alert = fluentWait.until(
ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='alert alert-danger']")));
}
catch (TimeoutException e)
{
// Does nothing, since it's a good thing
}
if (alert != null)
throw new ReservationException("The user number: " + i + " has already reserved a room for today"); // Waits for the reservation to pop up
fluentWait.until(
ExpectedConditions.presenceOfElementLocated(
By.xpath("//div[@class='modal-content']/div[@class='modal-body']/div[@class='modal-body-content']")
)); WebElement descriptionElement = fluentWait.until(
ExpectedConditions.presenceOfElementLocated(By.id("reservation_title")));
descriptionElement.sendKeys(description); // Fills in the duplicate email for the booking
WebElement duplicateEmailElement = browser.findElement(By.id("reservation_cc"));
duplicateEmailElement.sendKeys(users.get(i).getEmailDuplicate()); // Selects the row on the room picker
String roomText = "Bobst " + floorNumber + "-" + roomNumber; // Locates the room
WebElement divFind = browser.findElement(
By.xpath(
"//form[@id='new_reservation']/table[@id='availability_grid_table']/tbody/tr[contains(., '" + roomText + "')]")
); WebElement timeSlot = null; // Tries to get the next best time if it doesn't work
try
{
timeSlot = divFind.findElement(By.xpath("td[@class='timeslot timeslot_available timeslot_preferred']"));
}
catch (NoSuchElementException e)
{
System.err.println("The timeslot was already taken for user: " + i + ", taking next best time");
boolean found = false; // Continuously clicks the next button and checks until a time is found
while (found == false)
{
try
{
// Clicks the button once
browser.findElement(By.xpath("//div[@class='rebuild_grid rebuild_grid_next']")).click(); // Rechecks to find the timeSlot
timeSlot = divFind.findElement(By.xpath("td[@class='timeslot timeslot_available timeslot_preferred']")); // If it gets to this point, the timeslot is found, sets found = true
found = true;
}
catch (NoSuchElementException ex)
{
// Still didn't find an available timeslot, continues search
}
} // End of while loop
} // End of finding a time if original preference could not be found timeSlot.click(); // Submits
browser.findElement(By.xpath("//button[@class='btn btn-lg btn-primary']")).click(); // Waits a bit for confirmation to occur
FluentWait<WebDriver> buttonWait = new FluentWait<WebDriver>(browser)
.withTimeout(15, TimeUnit.SECONDS)
.pollingEvery(500, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class); buttonWait.until(
ExpectedConditions.presenceOfElementLocated(By.xpath("//div[@class='alert alert-success']"))); // Final status update
System.out.println("User number " + i + " status: successful"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Reserved");
Thread.sleep(3000);
}
catch (UserNumberException e)
{
System.err.println(e.getMessage());
System.out.println("User number " + i + " status: failed"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
catch(ReservationException e)
{
System.err.println(e.getMessage());
System.out.println("User number " + i + " status: failed"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
catch(TimeoutException e)
{
System.err.println(e.getMessage());
System.out.println("User number " + i + " status: failed"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
catch(InvalidLoginException e)
{
System.err.println(e.getMessage());
System.out.println("User number " + i + " status: failed"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
catch (InterruptedException e)
{
System.err.println("Sleep at end was interrupted");
System.out.println("User number " + i + " status: failed"); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
catch (Exception e)
{
System.err.println("Shit, something happened that wasn't caught");
System.out.println("User number " + i + " status: failed");
e.printStackTrace(); // Updates the dailyStatus log
String militaryTime = toMilitaryTime(i);
System.out.println(militaryTime + ": Not Reserved");
}
finally
{
// Logs out
browser.get("https://rooms.library.nyu.edu/logout");
try
{Thread.sleep(10000);}
catch (InterruptedException e1)
{System.err.println("Something wrong when trying to sleep after logout");} // Deletes cookies
browser.manage().deleteAllCookies();
browser.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // Closes the browser connection
browser.close();
System.out.println("Browser is now closed");
try {Thread.sleep(5000);}
catch (InterruptedException e)
{System.err.println("Sleep at end was interrupted");}
}
} //End of for loop // Closes logging streams
if (pOut != null)
pOut.close();
if (pErr != null)
pErr.close();
if (fOut != null)
{
try
{fOut.close();}
catch (IOException e)
{System.err.println("File output logging stream had errors when closing");}
}
if (fErr != null)
{
try
{fErr.close();}
catch (IOException e)
{System.err.println("File output error stream had errors when closing");}
}
}
selenium fluentwait java实例的更多相关文章
- Selenium Webdriver java 积累一
Selenium Webdriver 学习: http://jarvi.iteye.com/category/203994 https://github.com/easonhan007/webdriv ...
- selenium 3+java 配置全
之前有配置过java+selenium的环境,感觉将的不够详细,这里重新写一篇,以便日后复习,和大家共享. 一.准备工作. 首先在配置之前需要准备以下: JDK Eclipse Sel ...
- 精简版 Selenium PageFactory, Annotation 实例
精简版 Selenium PageFactory, Annotation 实例. 先是类: HomePage package com.test;import org.openqa.selenium. ...
- Thrift入门及Java实例演示<转载备用>
Thrift入门及Java实例演示 作者: Michael 日期: 年 月 日 •概述 •下载配置 •基本概念 .数据类型 .服务端编码基本步骤 .客户端编码基本步骤 .数据传输协议 •实例演示(ja ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- [selenium webdriver Java]常用api
1. 获取元素文本 WebElement类的getText()方法返回元素的innerText属性.所以元素里如果有子节点一样也会被返回出来.如下所示 public class GetText { @ ...
- JAVA实例
JAVA实例1 1 package Demo3; import java.io.File; import java.io.FileReader; import java.io.IOExceptio ...
- Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 J
Java 实例 - 如何执行指定class文件目录(classpath) Java 实例 如果我们 Java 编译后的class文件不在当前目录,我们可以使用 -classpath 来指定class ...
- Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs
ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...
随机推荐
- css3弹性盒子
CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时 ...
- CentOS 6\7修改主机名
1.CentOS6修改主机名 1)临时修改主机名: 显示主机名: oracle@localhost:~$ hostname localhost 修改 oracle@localhost:~$ sudo ...
- P1217 [USACO1.5]回文质数 Prime Palindromes
题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,000 ...
- 2018.7.15 解决css中input输入框点击时去掉外边框方法
.input_css{ background:no-repeat 0 0 scroll #EEEEEE; border:none; outline:medium; }
- 2017.11.18 C语言的算法分析题目
算法分析 1. 选定实验题目,仔细阅读实验要求,设计好输入输出,按照分治法的思想构思算法,选取合适的存储结构实现应用的操作. 2. 设计的结果应在Visual C++ 实验环境下实现并进行调试.(也可 ...
- css3之Media Queries 媒体查询
一.初步了解 Media Queries是CSS3新增加的一个模块功能,其最大的特点就是通过css3来查询媒体,然后调用对应的样式. 了解Media Queries之前需要了解媒体类型以及媒体特性: ...
- css3阴影 box-shadow
语法 box-shadow:X轴偏移量 y轴偏移量 [阴影模糊半径] [阴影扩展半径] [阴影颜色] [投影方式] 参数介绍: 注:inset 可以写在参数的第一个或最后一个,其它位置是无效的. 阴影 ...
- python非字符串与字符产链连接
第一种办法: "hello" +' '+str(110) 输出结果: 'hello 110' 第二种办法: import numpy x = 110 print 'hello(%d ...
- jquery 添加和删除节点
// 增加一个三和一节点 function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(&qu ...
- mongodb基础环境部署(windows系统下)
Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNorma ...