Вы должны изменить способ вы идентифицирующие элементы из 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");
Я очень новой концепции объектной модели страницы и сценариев автоматизации, поэтому извиняемся за основной вопрос. Как я могу инициализировать By ContactBoxBy в части FindsBy? – Marj
С помощью методов свойств вам больше не нужно иметь атрибут '[FindsBy]'. – Cosmin
поэтому, когда я использую методы свойств и для того, чтобы счетчик увеличивался, должен ли он выглядеть следующим образом: public By ContactBoxBy (строковый счетчик) {counter = counter + 1; get {return By.Id ("btnAdd {0} _btnAddExpense" + счетчик);} } – Marj