C# 每次需要创建IWebElement对象才能在页面上找到新元素?

C# 每次需要创建IWebElement对象才能在页面上找到新元素?,c#,.net,selenium-webdriver,C#,.net,Selenium Webdriver,我们是否需要每次都显式地创建一个新对象来查找同一页面上的元素 我们可以只创建一次IWebElement吗?就像硒1一样 IWebElement abc = driver.FindElement(By.Id("txtUserName")); abc.SendKeys("TEST"); IWebElement abc1 = driver.FindElement(By.Id("txtPassword")); abc1.SendKeys("TEST123"); IWebElement abc2 = dr

我们是否需要每次都显式地创建一个新对象来查找同一页面上的元素

我们可以只创建一次
IWebElemen
t吗?就像硒1一样

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();

你凭什么认为这是在创造一个新的物体

它声明了一个新变量,但这不是一回事。。。理解它们之间的区别是非常重要的

我看不出有什么理由不能重用一个变量,如果你想。。。但我个人会尝试使用不同的变量名来表示我发现的不同元素:

selenium.type("TEST");
selenium.click();
这使我更清楚地了解了我要采取的行动。当然,如果您定期使用“查找元素,发送一些键”模式,您可能需要编写一个方便的方法,以便调用:

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();

不,您不需要每次都创建一个新对象,但是您需要使用selenium来捕获每个要与之交互的新对象的对象。另外,如果您单击到一个新页面,然后单击“上一步”,您拥有的任何元素都将抛出一个需要处理的陈旧元素引用异常。实例化元素真正需要做的是:

EnterText("txtUserName", "TEST");
EnterText("txtPassword", "TEST123");
SubmitForm("buttonSignIn");
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();
}