我有我的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);
}
如何在FindsBy中声明这一点?显然,这不起作用:
[FindsBy(How = How.Id, Using = "(String.Format("btnAdd{0}_btnAddExpense", counter")]
public IWebElement contactBox { get; set; }
答案 0 :(得分:2)
您需要更改从Id
到Xpath
识别元素的方式。
[FindsBy(How = How.Xpath, Using = "your_xpath_here")] public IWebElement contactBox { get; set; }
为了简要解释一下它为什么不起作用,这是因为Using=""
接受一个常数值而你内部有一个变量。
为了使用id
,xpath
或其他内容中的变量来执行此操作,您可以创建类型为By
或IWebElement
的属性方法,具体取决于您之后需要做(虽然首选By
是因为你可以在WebDriverWait
s中使用它作为参数:
对于By
;
public By ContactBoxBy(string counter)
{
get {return By.Id("btnAdd{0}_btnAddExpense" + counter);}
}
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");