当对象id是动态的时,如何在页面工厂中初始化findby
本文关键字:工厂 findby 初始化 id 对象 动态 | 更新日期: 2023-09-27 18:03:51
我有我的id代码:
public int counter = 0;
public void AddClick(){
counter = counter + 1;
driver.FindElement(By.Id(String.Format("btnAdd{0}_btnAddExpense", counter))).Click();
Console.WriteLine("I am clicked {0} times!", counter);
}
如何在findby中声明这个?显然,这不起作用:
[FindsBy(How = How.Id, Using = "(String.Format("btnAdd{0}_btnAddExpense", counter")]
public IWebElement contactBox { get; set; }
您需要更改从Id
到Xpath
的元素标识方式。
[FindsBy(How = How.Xpath, Using = "your_xpath_here")] public IWebElement contactBox { get; set; }
给你一个简短的解释为什么它不工作,这是因为Using=""
接受一个常量,而你有一个变量在里面。
为了在你的id
, xpath
或其他东西中使用变量,你可以根据你需要做的事情创建类型By
或IWebElement
的属性方法(尽管By
是首选,因为你可以在你的WebDriverWait
s中使用它的参数):For By
;
public By ContactBoxBy(string counter)
{
get {return By.Id("btnAdd{0}_btnAddExpense" + counter);}
}
For IWebElement
:
public IWebElement ContactBox
{
get {return driver.FindElement(By.Id("btnAdd{0}_btnAddExpense" + counter));}
}
这样就不再需要[FindsBy]
属性了。
用法:
如果你想在联系人框中输入文本,你可以这样做:
driver.FindElement(ContactBoxBy(counter)).SendKeys("text to be inserted");
或者直接使用IWebElement
:
ContactBox.SendKeys("text to be inserted");