使用页面对象模型和页面工厂为我的元素传递参数
Pass parameters for my element using page object model and page factory
有问题,我的元素需要接收参数才能定位元素,您可以使用:
[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
你知道什么解决办法吗?谢谢
无法使用 PageFactory.InitElements
方法执行此操作,但您可以在 class 中为此创建一个单独的方法,例如:
public IWebElement GetIFrame(string id)
{
return driver.FindElement(By.Id(id));
}
所以你以后可以这样称呼它:
alumnoPage.GetIFrame("your-unique-id");
如果您这样设置 class,您还可以使用 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)));
}
}
有问题,我的元素需要接收参数才能定位元素,您可以使用:
[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
你知道什么解决办法吗?谢谢
无法使用 PageFactory.InitElements
方法执行此操作,但您可以在 class 中为此创建一个单独的方法,例如:
public IWebElement GetIFrame(string id)
{
return driver.FindElement(By.Id(id));
}
所以你以后可以这样称呼它:
alumnoPage.GetIFrame("your-unique-id");
如果您这样设置 class,您还可以使用 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)));
}
}