2016-08-24 6 views
0

У меня есть этот код для моих идентификаторов:Как инициализировать FindsBy на странице заводе, когда идентификаторы объектов являются динамическими

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; } 

ответ

1

Вы должны изменить способ вы идентифицирующие элементы из 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"); 
+0

Я очень новой концепции объектной модели страницы и сценариев автоматизации, поэтому извиняемся за основной вопрос. Как я могу инициализировать By ContactBoxBy в части FindsBy? – Marj

+1

С помощью методов свойств вам больше не нужно иметь атрибут '[FindsBy]'. – Cosmin

+0

поэтому, когда я использую методы свойств и для того, чтобы счетчик увеличивался, должен ли он выглядеть следующим образом: public By ContactBoxBy (строковый счетчик) {counter = counter + 1; get {return By.Id ("btnAdd {0} _btnAddExpense" + счетчик);} } – Marj

 Смежные вопросы

  • Нет связанных вопросов^_^