/** * * @param <P> * @param clazz * @param env * @return */ public <P extends Page> P fixUrlAndGotoLink(final Class<P> clazz, final Environment env) { this.logAction("LOAD PAGE " + clazz); return new RetryUntilTimeout<P>() { @Override P commandsToRun() { String href = getAttribute("href"); try { Assert.assertNotNull(env); String newhref = env.fixHost(href); driver.navigate().to(newhref); return PageFactory.createPage(getDriver(), clazz); } catch (MalformedURLException ex) { getDriver().getStepLogger().log(WARN, "INVALID HREF ON LINK:" + href); throw new InvalidElementStateException("INVALID HREF ON LINK:" + href); } } }.run(); }
/** * * @param webDriver {@link WebDriver} instance * @param value the file input value to set */ protected void setFileInputValue( WebDriver webDriver, String value ) { String locator = this.getElementProperties() .getInternalProperty(HtmlElementLocatorBuilder.PROPERTY_ELEMENT_LOCATOR); String css = this.getElementProperty("_css"); WebElement element = null; if (!StringUtils.isNullOrEmpty(css)) { element = webDriver.findElement(By.cssSelector(css)); } else { element = webDriver.findElement(By.xpath(locator)); } try { element.sendKeys(value); } catch (ElementNotVisibleException enve) { if (!UiEngineConfigurator.getInstance().isWorkWithInvisibleElements()) { throw enve; } // try to make the element visible overriding some CSS properties // but keep in mind that it can be still invisible using another CSS and/or JavaScript techniques String styleAttrValue = element.getAttribute("style"); JavascriptExecutor jsExec = (JavascriptExecutor) webDriver; try { jsExec.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, "display:'block'; visibility:'visible'; top:'auto'; left:'auto'; z-index:999;" + "height:'auto'; width:'auto';"); element.sendKeys(value); } finally { jsExec.executeScript("arguments[0].setAttribute('style', arguments[1]);", element, styleAttrValue); } } catch (InvalidElementStateException e) { throw new SeleniumOperationException(e.getMessage(), e); } }
public boolean fillTimeForTheDay(WebElement elemDay, int day){ try{ elemDay.sendKeys("8"); return true; } catch (InvalidElementStateException e){ System.out.println(days[day] +" is not available yet. Too bad we can't fill time in advance..."); return false; } }
public WaitFor(String cmd, StreamTokenizer tokenizer, boolean requiresContext) throws Exception { if (requiresContext && null == selection) { throw new Exception(cmd + " command requires a field selection at line " + tokenizer.lineno()); } int retry = 0; long now = 0; do { try { this.run(); return; } catch(StaleElementReferenceException e) { // element has gone stale, re-select it System.out.println("// EXCEPTION : StaleElementReference : " + e.getMessage().split("\n")[0]); retry++; } catch(InvalidElementStateException is) { System.out.println("// EXCEPTION : InvalidElementStateException : " + is.getMessage().split("\n")[0]); scrollContextIntoView(selection); retry++; } catch(WebDriverException e2) { System.out.println("// EXCEPTION : WebDriverException : " + e2.getMessage().split("\n")[0]); // Try and auto-recover by scrolling this element into view scrollContextIntoView(selection); retry++; } catch(RetryException r) { System.out.println("// EXCEPTION : RetryException : " + r.getMessage().split("\n")[0]); // Try and auto-recover by scrolling this element into view retry++; } catch(Exception e3) { System.out.println("// EXCEPTION : " + e3.getMessage().split("\n")[0]); if (retry++ > 3) this.fail(e3); } // attempt to recover now = (new Date()).getTime(); System.out.println(now + ": DEBUG: retry=" + retry + " calling sleepAndReselect(100) _waitFor = " + _waitFor); if (retry == 1 && now >= _waitFor) { System.out.println("// Wait timer already expired, apply default wait timer"); System.out.println("// wait " + (_defaultWaitFor*1.0)/1000.0); _waitFor = (long) now + _defaultWaitFor; } sleepAndReselect(100); } while (_waitFor > 0 && now < _waitFor); // action failed info(selection, selectionCommand, false); _waitFor = 0; // wait timer expired this.fail(new Exception(cmd + " failed at line " + tokenizer.lineno())); }