【问题标题】:Pass parameters for my element using page object model and page factory使用页面对象模型和页面工厂为我的元素传递参数
【发布时间】:2017-11-24 12:39:21
【问题描述】:

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

[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,我必须将页面的所有元素都保存在那里

你知道有什么解决办法吗?谢谢

【问题讨论】:

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


    【解决方案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)));
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多