Jako że swego czasu całkiem dużo czasu poświęciłem na znalezienie satysfakcjonującego mnie rozwiązania pozwalającego na odczyt wartości z plików XML (i oczywiście późniejsze ich wykorzystywanie w testach automatycznych), chciałbym innym tego czasu oszczędzić i przedstawić skuteczne oraz proste rozwiązanie. Znakomicie sprawdzi się (a przynajmniej powinno) jako baza do dalszego rozwoju maszynek zaciągających dane z plików wystawionych na zewnątrz.
Poniższe przykłady napisane w JAVA.
1. Zaczynamy od zdefiniowania prostego Stringa. To już tutaj dzieje się “wciąganie” pliku do pamięci i wyciąganie z niego interesujących nas wartości.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; public class XMLReader { public static String GetSiteAddress() throws Exception { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilderFactory.setNamespaceAware(true); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); //path to the Parameters.xml file Document document = documentBuilder.parse("config\\Parameters.xml"); //initialize java-native XPath reader XPathFactory xpathFactory = XPathFactory.newInstance(); XPath xpath = xpathFactory.newXPath(); //get the requested value by using XPath XPathExpression expr = xpath.compile("config/sites/site[@ToTest]/address"); //return value String address = (String) expr.evaluate(document, XPathConstants.STRING); return address; } } |
2. W dowolnej klasie która zawiera zdefiniowane testy, sprawdzamy, że powyższy String zostanie poprawnie zwrócony. W moim przypadku miejscem w którym użyję zczytywania z XML, będzie klasa Setup, która jest standardowo używana na samym starcie każdego wykonania zbioru testów.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import XMLReader.XMLReader; import XMLWriter.XMLWriter; import org.openqa.selenium.ie.InternetExplorerDriver; public class Setup { public static void WebDriverSetup() throws Exception { //initialize driver System.setProperty(XMLReader.GetBrowser(), XMLReader.GetWebDriverExe()); if(XMLReader.GetBrowser().contains("webdriver.ie.driver")){ //here was something... :) } else { driver = new ChromeDriver(); //tests should start with opening a baseUrl (http://192.168.1.10:1555 in this case) String baseUrl = XMLReader.GetSiteAddress(); driver.get(baseUrl); driver.manage().deleteAllCookies(); driver.manage().window().maximize(); } } } |
3. Uruchamiamy testy i sprawdzamy, że wartości, które zaciągnęła nasza maszynka są zgodne z tym co podaliśmy w ścieżce XPath w Stringu GetSiteAddress i zgodnie z tym, co jest w samym pliku XML, którego przykładowwą zawartość umieszczam poniżej.
1 2 3 4 5 6 7 8 |
C:\\Users\\rmianowicz\\Automaty\\Project_1\\screenshots\\ webdriver.chrome.driver MyPortal_1.0 <address>http://192.168.1.10:1555</address> admin ZbigniewStonoga MyPortal_2.0 <address>http://192.168.1.10:1556</address> admin ZbigniewStonoga |