2017-08-04 1 views
-1

Ich habe eine Reihe von Tests mit Selen mit einem Page Object Model Muster gemacht. Ich versuche, eine By zu übergeben, damit ich auf ein Element durch seinen Namen zugreifen kann. Jedoch in meiner PageFactory.InitElements(excelSession, ribbon); Methode bekomme ich eine Ausnahme von Type of member 'By' is not IWebElement or IList<IWebElement>. Gibt es eine Möglichkeit, diese Methode zu akzeptieren By?Art des Mitglieds 'By' ist nicht IWebElement oder IList <IWebElement>

Mein Code ist wie

public class ExcelRibbon 
{ 
    [FindsBy(How = How.Name, Using = "Create")] 
    [CacheLookup] 
    public By Create { get; set; } 
} 

folgt Wo ich meine Fehler erhalten

public static ExcelRibbon ribbon = new ExcelRibbon(); 
PageFactory.InitElements(excelSession, ribbon); 
webDriverWait.Until(ExpectedConditions.ElementExists(ribbon.Create)); 
webDriverWait.Until(ExpectedConditions.ElementToBeClickable(excelSession.FindElement(ribbon.Create))).Click(); 

Stacktrace

bei OpenQA.Selenium.Support.PageObjects.DefaultPageObjectMemberDecorator.CreateProxyObject (Typ memberType, IElementLocator-Locator, IEnumerabl e`1 bys, Boolean Cache)

+0

Fügen Sie den Fehlertrace in Frage –

+0

@ShubhamJain Ich habe einen StackTrace hinzugefügt –

Antwort

0

Wenn Sie ein FindsBy Attribut hinzufügen, es wird erwartet, dass die Locator dort beschriebenen Verfahren zu verwenden, um ein Element zu lokalisieren. By ist ein Locator, kein Element (wie im Fehler angegeben). Ich weiß nicht, was Sie meinen von

Gibt es eine Möglichkeit, diese Methode zu akzeptieren By?

Sie deklarieren ein Feld nicht als Typ By. Entweder die Art Wechsel von By zu IWebElement

[FindsBy(How = How.Name, Using = "Create")] 
[CacheLookup] 
public IWebElement Create { get; set; } 

oder die Dekorateure entfernen und einen Lokator

public By Create = By.Name("Create"); 

oder erstellen Sie eine Methode deklarieren, vielleicht so etwas wie

public void Create(By locator) 
{ 
    // do something 
} 
Verwandte Themen