IWebElement объект должен быть создан каждый раз, чтобы найти новый элемент на странице? - PullRequest
0 голосов
/ 29 апреля 2011
IWebElement abc = driver.FindElement(By.Id("txtUserName"));
abc.SendKeys("TEST");
IWebElement abc1 = driver.FindElement(By.Id("txtPassword"));
abc1.SendKeys("TEST123");
IWebElement abc2 = driver.FindElement(By.Id("buttonSignIn"));
abc2.Click();

Нужно ли нам каждый раз явно создавать новый объект, чтобы найти элемент на той же странице?

Можем ли мы просто создать IWebElemen t один раз?Как это было с Selenium 1?

selenium.type("TEST");
selenium.click();

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Что заставляет вас думать, что это создает новый объект?

Он объявляет новую переменную , но это не одно и то же ... и очень важно понимать разницу между ними.

Я не вижу причин, по которым вы не могли бы повторно использовать одну переменную, если бы захотели ... но я бы лично попытался использовать разные имена переменных для представления различных элементов, которые я нашел:

IWebElement usernameInput = driver.FindElement(By.Id("txtUserName"));
usernameInput.SendKeys("TEST");

IWebElement passwordInput = driver.FindElement(By.Id("txtPassword"));
passwordInput.SendKeys("TEST123");

IWebElement signinButton = driver.FindElement(By.Id("buttonSignIn"));
signinButton.Click();

Это проясняет, какое действие я пытаюсь предпринять, ИМО.Конечно, если вы регулярно используете шаблон «найти элемент, отправьте ему несколько ключей», вы можете написать удобный метод, чтобы вы могли вызвать:

EnterText("txtUserName", "TEST");
EnterText("txtPassword", "TEST123");
SubmitForm("buttonSignIn");
0 голосов
/ 23 ноября 2011

Нет, вам не нужно каждый раз создавать новый объект, но вам нужно будет использовать селен, чтобы поймать объект для каждого нового объекта, с которым вы хотите взаимодействовать.Также, если вы щелкнете по новой странице, а затем нажмете обратно все имеющиеся у вас элементы, вы получите исключение ссылки на устаревший элемент, которое необходимо обработать.Все, что вам действительно нужно сделать, чтобы определить элемент, это:

private IWebElement element;

private void Method()
{
  element = driver.FindElement(By.Id("txtUserName"));
  element.Clear();
  element.SendKeys("TEST");

  element = driver.FindElement(By.Id("txtPassword"));
  element.Clear();
  element.SendKeys("Test123");

  element = driver.FindElement(By.Id("buttonSignIn"));
  element.Click();
}
...