java - Selenium webdriver Wait method with dependency injection -
long story short: i'm working on framework has generic wait methods deal objects. typically per page, need have wait function in {area}page class , there needs find optimal set of object(s) confidently tell if page objects loaded. of depends on how effort has gone managing how objects loaded on page, i.e. item @ bottom of page not last object loaded.
in framework itself, want change functions waitbyid waittilldisplayed or similar , use injection identify object, i.e. function should not determine how object identified (i think should use dependency injection). i'm not sure on how done. have ideas on how done? thanks.
public static void waitforpageload(string browsertitle) { containers.logstep logstep = new containers.logstep(); try { string checkstring = ""; defaultwait<string> wait = new defaultwait<string>(checkstring); wait.timeout = timespan.fromseconds(10); // .fromminutes(1); wait.pollinginterval = timespan.frommilliseconds(250); func<string, bool> waiter = new func<string, bool>((string ele) => { string findtitle = browser.title; if (findtitle.contains(browsertitle)) { return true; } return false; }); wait.until(waiter); logstep.source = "waitforpageload"; logstep.elementname = browsertitle; logstep.action = "wait page"; logstep.data = ""; logstep.friendly = string.concat("wait page title \"", browsertitle, "\" load"); logstep.screenshot = capture(); logstep.result = reporting.pass; reporting.logstep(logstep); } catch (exception e) { logstep.friendly = e.message.tostring(); logstep.result = reporting.fail; reporting.logstep(logstep); } } public static void waitfordialogload(iwebelement dialog, string dialogtitle) { containers.logstep logstep = new containers.logstep(); try { string checkstring = ""; defaultwait<string> wait = new defaultwait<string>(checkstring); wait.timeout = timespan.fromseconds(10); // .fromminutes(1); wait.pollinginterval = timespan.frommilliseconds(250); func<string, bool> waiter = new func<string, bool>((string ele) => { string findtitle = dialog.text.tostring(); if (findtitle.contains(dialogtitle)) { return true; } return false; }); wait.until(waiter); logstep.source = "waitfordialogload"; logstep.elementname = dialogtitle; logstep.action = "wait dialog"; logstep.data = ""; logstep.friendly = string.concat("wait dialog title \"", dialogtitle, "\" load"); logstep.screenshot = capture(); logstep.result = reporting.pass; reporting.logstep(logstep); } catch (exception e) { logstep.friendly = e.message.tostring(); logstep.result = reporting.fail; reporting.logstep(logstep); } } public static void waitbyclassname(string elementname, string findby) { containers.logstep logstep = new containers.logstep(); try { iwebelement element = browser.getdriver.findelement(by.classname(findby)); int maxwait = 10000; int counter = 0; while (element == null && counter < maxwait) { element = browser.getdriver.findelement(by.classname(findby)); thread.sleep(500); counter += 500; } logstep.source = "waitbyclassname"; logstep.elementname = elementname; // element.getlogicalname(); logstep.action = "displayed"; logstep.data = element.displayed.tostring(); logstep.friendly = "wait \"" + logstep.elementname + "\" displayed on page"; logstep.result = reporting.pass; reporting.logstep(logstep); } catch (exception e) { logstep.friendly = e.message.tostring(); logstep.result = reporting.fail; reporting.logstep(logstep); } } public static void waitbyid(string elementname, string findby) { containers.logstep logstep = new containers.logstep(); try { iwebelement element = browser.getdriver.findelement(by.id(findby)); int maxwait = 10000; int counter = 0; while (element == null && counter < maxwait) { element = browser.getdriver.findelement(by.id(findby)); thread.sleep(500); counter += 500; } logstep.source = "waitbyid"; logstep.elementname = elementname; logstep.action = "displayed"; logstep.data = element.displayed.tostring(); logstep.friendly = "wait \"" + logstep.elementname + "\" displayed on page"; logstep.result = reporting.pass; reporting.logstep(logstep); } catch (exception e) { logstep.friendly = e.message.tostring(); logstep.result = reporting.fail; reporting.logstep(logstep); } }
pass by locator argument method instead of string.
public static void waittilldisplayed(string elementname, locator) { containers.logstep logstep = new containers.logstep(); try { iwebelement element = browser.getdriver.findelement(locator); // updated variable instead of string int maxwait = 10000; int counter = 0; while (element == null && counter < maxwait) { element = browser.getdriver.findelement(locator); // updated variable instead of string thread.sleep(500); counter += 500; } logstep.source = "waitbyid"; logstep.elementname = elementname; logstep.action = "displayed"; logstep.data = element.displayed.tostring(); logstep.friendly = "wait \"" + logstep.elementname + "\" displayed on page"; logstep.result = reporting.pass; reporting.logstep(logstep); } catch (exception e) { logstep.friendly = e.message.tostring(); logstep.result = reporting.fail; reporting.logstep(logstep); } } so can call method locator wish:
waittilldisplayed("logintextbox", by.id("login")); // or waittilldisplayed("logintextbox", by.classname("txt")); // or waittilldisplayed("logintextbox", by.xpath("//input[0]")); is wanted?
Comments
Post a Comment