Testování (Selenium apod.): jak řešit příchozí události rubrika: Programování: Jiné
Chtěl bych testovat AJAXovou webovou aplikaci. Používám Selenium WebDriver trošku okořeněný Play Frameworkem.
Do aplikace přicházejí nějaké události. Můžete si představit třeba proud novinek, zprávy v chatu nebo něco podobného. Já chci otestovat, že v některé chvíli (po nějaké akci vyvolané odjinud) přijde očekávaná zpráva. Jak na to?
Aby to bylo ještě komplikovanější, budu odmazávat staré zprávy.
Můžu tu zprávu hledat v DOMu. Jenže:
- I při testování tu může být určitá latence. Jak to řešit? Thread.sleep je prasárna.
- Kdyby mohlo dojít více zpráv, jak vybrat tu pravou? Nemůžu prostě jen číst tu poslední...
Řešili jste už něco podobného? Jde mi třeba i o princip řešení, i pokud používáte jiný nástroj.
Normálně si ve webdriveru zaregistruj vlastní event listener na událost příchozích zpráv a v něm testuj. Nejspíš to bude chtíl vylepšit design JS komponent, aby šlo ten event observovat, ale o to líp.
Komentáře
- v6ak : Asi to tak nějak dopadne, ale musel bych něco vyhodit do globální proměnné. Pokud to teda neudělala nějakým způsobem knihovna (Portal). Většinou se ale takovému postupu bráním. — 23.12.2013
- Anonym : Když necháš probublat syntetický event, nemusíš nastavovat žádnou globální proměnnou. — 23.12.2013
- v6ak : Nejde mi o nastavování globální proměnné, ale o to, že si to potřebuju k něčemu zaregistrovat. Jenže typicky proměnné skrývám pomocí (function(){...})(). Takže nevím, kde bych si tu událost zaregistroval. Nebo mám hledat něco v názvu _syntetický_ event? Googlil jsem ten název, ale patrně se ten pojem používá v různých kontextech. — 25.12.2013
- Anonym : Třeba v jQuery můžeš použít http://api.jquery.com/category/ajax/global-ajax-event-handlers/, kde se zahookuješ na všechny AJAX requesty. Pokud používáš něco jinýho, co nemá možnost se nějak zahookovat, je potřeba odpálit vlastní event a ten odchytit třeba na body https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_t.... — 26.12.2013
Pro zobrazení všech 2 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře