2017-03-29 1 views
0

Wir erstellen eine Webanwendung mit erweiterbaren Arbeitsbereichen an den Seiten der Seite, die basierend auf der Seitengröße erweitert und verkleinert werden. Wenn der Arbeitsplatz vertraglich festgelegt ist, sind die Seitenobjekte der erweiterten Liste nicht sichtbar, um beim Aufruf der Klasse initialisiert zu werden, da der Standort in Angular entwickelt wird. 2.0Laden von Selenium-Seitenobjekten basierend auf der Browserfenstergröße

Wir erstellen auch ein automatisiertes Testframework mit Selenium mit C# -Bindungen und Verwenden des Seitenobjektmodells zum Ausführen unserer Automatisierung. Ist es möglich, Last Objekte basierend auf dem Fenster zu einer einzigen Seite Klasse wie dieses

public class PageObjectClass 
{ 
    public PageObjectClass(IwebDriver driver) 
    { 
     PageFactory.InitElements(driver, this) 
    } 

    private IWebElement anObjectVisibleWhenContracted 
    //load an object that is not visible based on window size 
} 

Oder muss ich die Größe des Fensters erhalten, wenn ich die Klasse aufrufen und haben separate Klassen basierend auf Fensterbreite im Test Skripte wie folgt?

if (driver.Manage().Window.Size.Width < 1280) 
{ 
    someVar = new PageObjectClass(driver): 
} 
else 
{ 
    someOtherVar = new exp[andedPageObjects 
} 
//do stuff here 

Antwort

0

Wenn Sie nicht wollen, Fragen zu stellen, wenn ein Element angezeigt, aber Selen nicht mit ihm eine gute Praxis ist das Browserfenster auf setUp zu maximieren interagieren.

Immer noch, wenn Sie dies nicht tun möchten, scrollt Selen zu einem Element, wenn Sie damit interagieren.

So beantwortet Ihre Frage - Sie müssen die Fenstergröße nicht ändern. Wenn Sie PageObject in C# verwenden, wie Sie es sehen, wird jedes Element initialisiert, wenn Sie es adressieren (klicken Sie auf, sendKeys usw.). Jedes Mal, wenn Sie ein Element ansprechen, wird es erneut initialisiert und Selen muss zu diesem Element scrollen.

Es gibt jedoch einige Fehler, die in einigen Fällen auftreten, wenn ein Element am Rand der Seite angezeigt wird und Selen nicht korrekt zu ihm scrollen kann. Warum das passiert, weiß ich nicht, aber zum Glück passiert es sehr selten.

0

Ich habe das selbst herausgefunden. In den Klassen, in denen ich mit erweiterbaren Arbeitsbereichen arbeiten musste, deklarierte ich alle meine Variablen in der Klasse und ordnete ihnen keine Werte zu, bevor ich Page_Factory.InitElements im Klassenkonstruktor in einer Size-Variablen zusammen mit dem übergeben wurde WebDriver mit der aktuellen Größe des Fensters. Dann wurden die Objekte, die für die Fenstergröße geeignet waren, basierend darauf geladen

Nur ein wenig Umstrukturierung und jetzt funktioniert es wie ein Charme. Klassenstruktur sieht jetzt so aus

public class ClassName: InheritedClass 
{ 

    #region Page Objects 

    private IWebElement object1; 
    private IWebElement object2; 

    #endregion 

    public ClassName(IWebDriver driver, Size winSize) 
    { 
     PageFactory.InitElements(driver, this); 

     if (winSize.Width > 1440) 
     { 
      object1= driver.FindElement(expanded By phrase locator); 
      object1 = driver.FindElement(expanded By phrase locator); 
     } 
     else 
     { 
      object1= driver.FindElement(contracted By phrase locator); 
      object1 = driver.FindElement(contracted By phrase locator); 
     } 
    } 

    #region Page Methods that use these objects 
    #endregion 
} 
Verwandte Themen