1

有问题,我的元素需要接收参数才能定位元素,您可以使用:

[FindsBy(How = How.XPath, Using = "//iframe[contains(@id,'" + VAR + "')]")]
public IWebElement iframe{ get; set; }

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

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

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

有知道的解决方法吗,谢谢

4

1 回答 1

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)));
    }
}
于 2017-11-24T12:53:50.153 回答