使用页面对象模型和页面工厂传递元素的参数

时间:2017-11-24 12:39:22

标签: c# selenium selenium-webdriver pageobjects page-factory

有问题,我的元素需要接收能够定位元素的参数,因为你可以使用:

var alumnoPage = new CrearAlumnoPage();
PageFactory.InitElements(driver, alumnoPage);
alumnoPage .iframe(VAR);

我需要传递一个参数,例如:

append

我必须拥有页面的所有元素,如果它没有破坏POM

你知道任何解决方案吗?谢谢

1 个答案:

答案 0 :(得分:1)

使用PageFactory.InitElements方法无法实现此目的,但您可以在类中创建一个单独的方法,例如:

public IWebElement GetIFrame(string id)
{
    return driver.FindElement(By.Id(id));
}

所以你可以稍后再这样说:

alumnoPage.GetIFrame("your-unique-id");

如果你设置了这样的课程,你也可以使用WebDriverWait来获取你的iframe:

class CrearAlumnoPage
{
    private IWebDriver driver;
    private WebDriverWait wait;

    public CrearAlumnoPage(IWebDriver driver)
    {
        this.driver = driver;
        wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
        // WebDriverWait is in OpenQA.Selenium.Support.UI
    }

    public IWebElement GetIFrame(string id)
    {
        return wait.Until(ExpectedConditions.ElementLocated(By.Id(id)));
    }
}