2017-02-16 2 views
0

Ich baue ein Testframework, mein Ziel ist es, viele Websites zu testen, die ähnliche Seiten mit geringem Unterschied zwischen diesen Frameworks haben.Selen Dynamische Selektoren für WebElements

Ich habe ein Problem, wo WebElements Selektoren dynamisch sein sollen, was bedeutet, dass ich den Weg, wie ich das Element als ein Parameter für FindElement-Methode finden möchten, übergeben möchte.

ich so etwas wie dieses bin versucht zu bauen:

public class WebComponent 
     { 
      public int ID { get; set; } 
      public string Name { get; set; } 
      public string Description { get; set; } 
      public IWebElement WebElement{get;set;} 
      public Accessor Accessor { get; set; } 
      public WebComponent() 
      { 
       Accessor = new Accessor(); 
      } 

    } 
    public class Accessor 
    { 
     OpenQA.Selenium.By By { get; set; } 
     public string Value { get; set; } 
    } 

Und später in meinem Code, wenn ich Instanz dieser Klasse haben wollen:

WebComponent component = new WebComponent(); 
component.ID = 1; 
component.Name = "Logout Button"; 
component.Description = "The button to click when user wants to logout of website"; 
component.Accessor.By = By.Id; 
component.Accessor.Value = "logout"; 
component.WebElement = Browser.Driver.FindElement(//missing code); 

Meine Frage ist, wie kann ich die finden WebElement mit component.Accessor, jeder Ratschlag oder vorgeschlagene Änderungen werden sehr geschätzt.

Antwort

1

By.Id ist eine Methodengruppe, die Sie nicht dem Typ OpenQA.Selenium.By zuordnen können. Die Zuordnung sollte

component.Accessor.By = By.id("logout"); // or any other By and value. 

und dann können Sie das Element orten mit

component.WebElement = Browser.Driver.FindElement(component.Accessor.By); 

bearbeiten

Um den Locator und Wert wählen dynamisch Sie so etwas wie

tun können
private By chooseType(String locatorType, string value) { 
    switch(locatorType) { 
     case "id": 
      return By.id(value); 
     case "class": 
      return By.className(value); 
     //... 
    } 
} 
+0

aber dieses wa y erlaubt mir keine dynamische Zugriffsmethode, die zwischen {Id, Name, ClassName, etc ..} wechseln kann. –

+0

@YahyaHHussein Warum nicht? Sie können 'component.Accessor.By = By.Id (" logout ");' und Zeile unter 'component.Accessor.By = By.className (" someClass ");'. 'Jetzt component.Accessor.By' ist' By.className ("someClass"); ' – Guy

+0

Denke wie wenn ich möchte, dass der Tester die Zugriffsmethode mit Combobox wählt. Dieser Weg erfordert eine Bedingung für jede Zugriffsmethode. –