OpenKeyWord  Build_ID: 457, Datum: 01.02.2020 07:45:48
Dont repeat yourself. - Do it once and only once!
SeDriver.java
1 /*
2  ==============================================================================
3  Author: Zoltán Hrabovszki <zh@openkeyword.de>
4 
5  Copyright © 2012 - 2019 IT-Beratung Hrabovszki
6  www.OpenKeyWord.de
7  ==============================================================================
8 
9  This file is part of OpenKeyWord.
10 
11  OpenKeyWord is free software: you can redistribute it and/or modify
12  it under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenKeyWord is distributed in the hope that it will be useful,
17  but WITHOUT ANY WARRANTY; without even the implied warranty of
18  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  GNU General Public License for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenKeyWord. If not, see <http://www.gnu.org/licenses/>.
23 
24  Diese Datei ist Teil von OpenKeyWord.
25 
26  OpenKeyWord ist Freie Software: Sie können es unter den Bedingungen
27  der GNU General Public License, wie von der Free Software Foundation,
28  Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren
29  veröffentlichten Version, weiterverbreiten und/oder modifizieren.
30 
31  OpenKeyWord wird in der Hoffnung, dass es nützlich sein wird, aber
32  OHNE JEDE GEWÄHRLEISTUNG, bereitgestellt; sogar ohne die implizite
33  Gewährleistung der MARKTFÄHIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.
34  Siehe die GNU General Public License für weitere Details.
35 
36  Sie sollten eine Kopie der GNU General Public License zusammen mit
37  OpenKeyWord erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>.
38 */
39 
40 package okw.gui.adapter.selenium.webdriver;
41 
42 import java.util.ArrayList;
43 import java.util.List;
44 
45 import org.openqa.selenium.By;
46 import org.openqa.selenium.NoSuchFrameException;
47 import org.openqa.selenium.WebDriver;
48 import org.openqa.selenium.WebElement;
49 import org.openqa.selenium.chrome.ChromeDriver;
50 import org.openqa.selenium.firefox.FirefoxDriver;
51 import org.openqa.selenium.htmlunit.HtmlUnitDriver;
52 
53 import okw.exceptions.OKWGUIObjectNotFoundException;
54 import okw.exceptions.OKWGUIObjectNotUniqueException;
55 import okw.log.Logger_Sngltn;
56 
60 public class SeDriver
61 {
62 
63  // Get the instance of Logger_Sngltn
64  protected Logger_Sngltn MyLogger = Logger_Sngltn.getInstance();
65 
66  private WebDriver driver = null;
67 
72  private String currentiframeID = "";
73 
74  public String getCurrentiframeID()
75  {
76  return currentiframeID;
77  }
78 
82  private static SeDriver instance = new SeDriver();
83 
84  private SeDriver()
85  {
86  }
87 
102  public static SeDriver getInstance()
103  {
104  return instance;
105  }
106 
107  public void setDriver( WebDriver fpDriver )
108  {
109  this.driver = fpDriver;
110  }
111 
112  public WebDriver getDriver( )
113  {
114  return this.driver;
115  }
116 
117 
118  public void __DriveChrome()
119  {
120  this.driver = new ChromeDriver();
121  }
122 
123  public void __DriveFireFox()
124  {
125  this.driver = new FirefoxDriver();
126  }
127 
128  /*public void DriveInternetExplorer()
129  {
130  this.driver = new InternetExplorerDriver();
131  }*/
132 
133  public void __DriveUnitDriver()
134  {
135  try
136  {
137  this.driver = new HtmlUnitDriver( true );
138  }
139  catch (Exception e)
140  {
141 
142  System.out.println( e.getStackTrace() );
143  }
144  }
145 
160  public void swichToFrame( String iframeID )
161  {
162 
163  // Nur etwas Unternehmen wenn iframeID sich geändert hat
164  if ( !currentiframeID.equalsIgnoreCase( iframeID ) )
165  {
166  // first reset to default
167  driver.switchTo().defaultContent();
168 
169  // then set to yor iframe if not null or empty!
170  if ( !okw.OKW_Helper.isStringNullOrEmpty( iframeID ) )
171  {
172  try
173  {
174  driver.switchTo().frame( iframeID );
175 
176  // Neuenwert merken wenn Fehlerfrei ge-Switchto wurde...
177  currentiframeID = iframeID;
178 
179  }
180  catch (NoSuchFrameException e)
181  {
182  System.out.println( "Unable to locate frame with id " + iframeID + e.getStackTrace() );
183  }
184  catch (Exception e)
185  {
186  System.out.println( "Unable to navigate to frame with id " + iframeID + e.getStackTrace() );
187  }
188  }
189  }
190  }
191 
192 
215  public String getFrameID4Locator( String fpsLocator )
216  {
217  String return_iFrame = null;
218  WebElement myWebElement = null;
219 
220  // Merkt sich die "gefundenen" Ausnahme in der Schleife
221  // und löst diesen ggf. nach der schleife aus.
222  Exception ExceptionFound = null;
223 
224  MyLogger.LogFunctionStartDebug( "SeDriver.getFrameID4Locator", "fpsLocator", fpsLocator );
225 
226  // Liste der Frame-ID´s ermitteln, die sich im aktuellen Fenster befinden
227  ArrayList<String> iframeIDs = new ArrayList<String>();
228 
229  iframeIDs.add( currentiframeID );
230  iframeIDs.addAll( getIframesID() );
231 
232  MyLogger.LogPrintDebug( "Number of iFrames found: " + ((Integer)iframeIDs.size()).toString() );
233 
234  // iframes(ID) jeweils nach dem GUI-Objekt durchsuchen.
235  for ( String iframeID : iframeIDs )
236  {
237  try
238  {
239  myWebElement = this.getElement( iframeID, fpsLocator );
240 
241  if ( myWebElement != null )
242  {
243  return_iFrame = currentiframeID;
244  break;
245  }
246  }
248  {
249  ExceptionFound = e;
250  continue;
251  }
253  { // Hier wird z.B. abgefangen wenn zwei Locatoren
254  ExceptionFound = e;
255  break;
256  }
257  catch ( Exception e )
258  { // Other exceptions...
259 
260  ExceptionFound = e;
261  break;
262  }
263  }
264 
265  if ( ExceptionFound instanceof OKWGUIObjectNotFoundException )
266  {
267  MyLogger.LogPrintDebug( "Object not found." );
268  MyLogger.LogFunctionEndDebug( );
269  throw new OKWGUIObjectNotFoundException( ExceptionFound.getMessage() );
270  }
271  else if ( ExceptionFound instanceof OKWGUIObjectNotUniqueException )
272  {
273  MyLogger.LogPrintDebug( "More than one Object found." );
274  MyLogger.LogFunctionEndDebug( );
275  throw new OKWGUIObjectNotUniqueException( ExceptionFound.getMessage() );
276  }
277  else if ( ExceptionFound != null )
278  {
279  MyLogger.LogPrintDebug( "Unknown Exception." );
280  MyLogger.LogFunctionEndDebug( );
281  throw new RuntimeException( ExceptionFound );
282  }
283  else
284  {
285  MyLogger.LogFunctionEndDebug( "iFrame: '" + return_iFrame + "'");
286  }
287  return return_iFrame;
288  }
289 
290 
306  public ArrayList<String> getIframesID( )
307  {
308 
309  ArrayList<String> lvReturn = new ArrayList<String>();
310 
311  MyLogger.LogFunctionStartDebug( "SeDriver.getIframesID");
312 
313  //final
314  List<WebElement> iframes = this.driver.findElements(By.tagName("iframe"));
315 
316  MyLogger.ResOpenListDebug( "iFrames..." );
317 
318  for (WebElement iframe : iframes)
319  {
320  String myID = iframe.getAttribute("id");
321 
322  if ( ! okw.OKW_Helper.isStringNullOrEmpty( myID ) )
323  {
324  lvReturn.add( myID );
325  MyLogger.LogPrintDebug( "ID='" + myID + "'" ); }
326  else
327  {
328  myID = iframe.getAttribute("name");
329 
330  if ( ! okw.OKW_Helper.isStringNullOrEmpty( myID ) )
331  {
332  lvReturn.add( myID );
333  MyLogger.LogPrintDebug( "name='" + myID + "'" );
334  }
335  else
336  {
337  MyLogger.LogWarning( "iFrame has neither ID nor Name:" + iframe.toString() );
338  }
339  }
340  }
341 
342  MyLogger.ResCloseListDebug( );
343  MyLogger.LogFunctionEndDebug( lvReturn );
344 
345  return lvReturn;
346  }
347 
369  public WebElement getElement( String fpsFrameID, String fpsLocator )
370  {
371  WebElement me = null;
372  List<WebElement> meme = null;
373 
374  try
375  {
376  this.MyLogger.LogFunctionStartDebug( "SeDriver.getElement", "fpsFrameID", fpsFrameID, "fpsLocator", fpsLocator );
377 
378  // 1. ggf Auf das richtige frame Setzen oder zurück auf default.
379  this.swichToFrame( fpsFrameID );
380 
381  // Element ggf. des richtigen Frames Holen.
382  meme = this.driver.findElements( By.xpath( fpsLocator ) );
383 
384  if ( meme.size() == 0 )
385  {
386  String lvsPrintMe = "GUI-Objekt nicht gefunden! IFrame: '" + fpsFrameID + "' Locator: '" + fpsLocator + "'";
387  this.MyLogger.LogPrint( lvsPrintMe );
388 
389  throw new OKWGUIObjectNotFoundException( lvsPrintMe );
390  }
391  else if ( meme.size() > 1 )
392  {
393  String lvsPrintMe = "Locator ist nicht eindeutig! IFrame: '" + fpsFrameID + "' Locator: '" + fpsLocator + "'";
394 
395  this.MyLogger.LogWarning( lvsPrintMe );
396 
397  throw new OKWGUIObjectNotUniqueException( lvsPrintMe );
398  }
399  else
400  {
401  String lvsPrintMe = "GUI-Objekt gefunden IFrame: '" + fpsFrameID + "' Locator: '" + fpsLocator + "'";
402  this.MyLogger.LogPrintDebug( lvsPrintMe );
403  me = meme.get( 0 );
404  }
405  }
406  finally
407  {
408  // Logfunction schliessen...
409  if (me != null)
410  this.MyLogger.LogFunctionEndDebug( me.toString() );
411  else
412  this.MyLogger.LogFunctionEndDebug( );
413  }
414 
415  return me;
416  }
417 
430  public List<WebElement> getElements( String fpsFrameID, String fpsLocator )
431  {
432  List<WebElement> meme = null;
433 
434  this.MyLogger.LogFunctionStartDebug( "SeDriver.getElement", "fpsFrameID", fpsFrameID, "fpsLocator", fpsLocator );
435 
436  try
437  {
438  // 1. Auf das richtige frame Setzen oder zurück auf default.
439  this.swichToFrame( fpsFrameID );
440 
441  // 2. Element im Frame finden.
442  meme = this.driver.findElements( By.xpath( fpsLocator ) );
443  }
444  finally
445  {
446  this.MyLogger.LogFunctionEndDebug(); ;
447  }
448  return meme;
449  }
450 
451  /*
478 }
okw.gui.adapter.selenium.webdriver.SeDriver.getIframesID
ArrayList< String > getIframesID()
Ermittelt alle iFrames im aktuellen HTML und erstellt eine liste der iFrame-ID´s.
Definition: SeDriver.java:306
okw.gui.adapter.selenium.webdriver.SeDriver
Pattern Singelton.
Definition: SeDriver.java:60
okw.log.Logger_Sngltn.LogFunctionEndDebug
void LogFunctionEndDebug()
LogFunctionEndDebug:
Definition: Logger_Sngltn.java:249
okw.log.Logger_Sngltn.getInstance
static Logger_Sngltn getInstance()
Zentrale Logger-Klasse stellt Logger-Methoden innerhalb von OKW zur Verfügung.
Definition: Logger_Sngltn.java:88
okw.gui.adapter.selenium.webdriver.SeDriver.currentiframeID
String currentiframeID
ID des iframes, auf welches aktuell der Driver zeigt.
Definition: SeDriver.java:72
okw.exceptions.OKWGUIObjectNotFoundException
Diese Ausnahme wird ausgelöst, wenn ein GUI-Objekt zu den im Frame gegebenen Objekterkennungseigensch...
Definition: OKWGUIObjectNotFoundException.java:69
okw.log.Logger_Sngltn.ResOpenListDebug
void ResOpenListDebug(String fpsListCaption)
Erzeugt eine hierachische Log-Ebene in der Ergenbniss-Ausgabe.
Definition: Logger_Sngltn.java:647
okw.log.Logger_Sngltn.LogFunctionStartDebug
void LogFunctionStartDebug(String fps_FunctionName, String... fpsParameter)
LogFunctionStartDebug:
Definition: Logger_Sngltn.java:311
okw.gui.adapter.selenium.webdriver.SeDriver.swichToFrame
void swichToFrame(String iframeID)
Wechselt das aktuelle Frame auf das Frame mit der id=iframeID.
Definition: SeDriver.java:160
okw.gui.adapter.selenium.webdriver.SeDriver.getFrameID4Locator
String getFrameID4Locator(String fpsLocator)
Ermittelt die iFrame ID zum gegeben Lokator fpsLocator.
Definition: SeDriver.java:215
okw.gui.adapter.selenium.webdriver.SeDriver.getInstance
static SeDriver getInstance()
Gibt die Instance für die einzige Instanz dieser Klasse zurück.
Definition: SeDriver.java:102
okw.log.Logger_Sngltn.ResCloseListDebug
void ResCloseListDebug()
Closes a hierarchical level in the results file that was opened with ResOpenList.
Definition: Logger_Sngltn.java:594
okw.exceptions.OKWGUIObjectNotUniqueException
Diese Ausnahme wird ausgelöst, wenn mehr als ein GUI-Objekt zum gegeben Lokator gefunden wird.
Definition: OKWGUIObjectNotUniqueException.java:67
okw.log.Logger_Sngltn.LogPrint
void LogPrint(String fps_Message)
LogPrint Function: Prints the values of expressions to the results file.
Definition: Logger_Sngltn.java:487
okw.log.Logger_Sngltn.LogPrintDebug
void LogPrintDebug(String fpsMessage)
Loggt eine Nachricht.
Definition: Logger_Sngltn.java:520
okw.gui.adapter.selenium.webdriver.SeDriver.getElements
List< WebElement > getElements(String fpsFrameID, String fpsLocator)
Ermittelt das Webelement mit der gegebenen frameID und dem gegebenen Locator.
Definition: SeDriver.java:430
okw.gui.adapter.selenium.webdriver.SeDriver.instance
static SeDriver instance
Singelton-Class: instanz hold the Object-Referenc of CurrentObject.
Definition: SeDriver.java:82
okw.gui.adapter.selenium.webdriver.SeDriver.getElement
WebElement getElement(String fpsFrameID, String fpsLocator)
Ermittelt das Webelement mit der gegebenen frameID und dem gegebenen Locator.
Definition: SeDriver.java:369
okw.log.Logger_Sngltn
Definition: Logger_Sngltn.java:54
okw.log.Logger_Sngltn.LogWarning
void LogWarning(String fps_Message)
LogWarning Function: Logs a warning to the results file.
Definition: Logger_Sngltn.java:536