c# - How to run second test without reload page -
i'm trying create tests of web page using selenium , have stuck in 1 place. need run few test on same tab on web page without reloading it. sound easy added kind of solution allow me run same tests in many browsers. let me explain problem showing more code:
bronswer enum:
public enum browser { internetexplorer, firefox, chrome } this code used in future switching betwen browsers,
main base class :
[testfixture(browser.internetexplorer)] [testfixture(browser.firefox)] [testfixture(browser.chrome)] public class testbase { protected remotewebdriver driver; protected browser browsertype; protected list<browser> bronswerstorun; internal testbase(browser browser) : this(browser, new list<browser>()) { } public testbase(browser browser, list<browser> bronswerstorun) { browsertype = browser; bronswerstorun = bronswerstorun; } [testfixturesetup] public virtual void setup() { if (bronswerstorun.any() && !bronswerstorun.contains(browsertype)) { assert.ignore(); } switch (browsertype) { case browser.chrome: { driver = new chromedriver(); break; } case browser.firefox: { driver = new firefoxdriver(); break; } case browser.internetexplorer: { var options = new internetexploreroptions { introduceinstabilitybyignoringprotectedmodesettings = true }; driver = new internetexplorerdriver(options); break; } default: assert.ignore(); break; } } [setup] public virtual void beforeeachbase() { driver.navigate().gotourl("http:mywebpage/"); } [teardown] public virtual void afterallbase() { } ~testbase() { driver.close(); } } this class allow me run test in more 1 internet browser if want. pass list of browsers in constructor ( right hardcoded in furure settings ) if browsers in not in list tests ignored one.
base class tab test:
public class tabtestbase : testbase { protected ireadonlycollection<iwebelement> searchelemens; public tabtestbase(browser s):base(s,new list<browser>{browser.internetexplorer}) { } public override void beforeeachbase() { driver.navigate().gotourl("http:mywebpage/tab"); } } this code used base class testing separate tab.
and tab tests class :
[testfixture] public class tabtest : tabtestbase { public tabtest(browser s) : base(s) { } [test] public void test1() { //tests } [test] public void test2() { //tests } } overall work fine. when tabtest class runned starting web page on tab , start testing it. problem every single test run beforeeachbase() method form tabtestbase unnecessary refresh page. want make code run tab 1 , next leave it. can't load web page in constructor because in code when constructor of tabtestbase or tabtest runned driver object not set yet solution bad. have 2 working solutions looks unprofessional.
frist:
add parameters check beforeeachbase() runned, , if yes skip :
public override void beforeeachbase() { if (firstrun) { driver.navigate().gotourl("http:mywebpage/tab"); firstrun = false; } } but in opinion unprofessional. second working idea worst :
is add navigate url in first test test1 instead of in beforeeachbase method :
[test] public void test1() { driver.navigate().gotourl("http:mywebpage/tab"); // tests } but said worst 1st idea.
so question : there way nice , clear ? not refresh page every time ?
just bonus question :
right can run test on 3 different browsers 1 one. there way rebuild code in 1 time ( parallel or multithread ? )
thanks.
the problem here
[setup] public virtual void beforeeachbase() { driver.navigate().gotourl("http:mywebpage/"); } this method run before every single [test], , cause behavior seeing, recommend removing method together, , update [testfixturesetup] @ end of add
driver.navigate().gotourl("http:mywebpage/"); this ensure navigation happens once per fixture, [setup] , [teardown] test specific meaning run before , after each test.
Comments
Post a Comment