每次都需要创建IWebElement对象来查找页面上的新元素

本文关键字:新元素 元素 查找 创建 对象 IWebElement | 更新日期: 2023-09-27 17:53:59

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吗?就像硒1一样?

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

每次都需要创建IWebElement对象来查找页面上的新元素

是什么让你认为这是在创建一个新对象?

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

我不明白为什么你不能重用一个单一的变量,如果你想…但我个人会尝试使用不同的变量名称来表示我发现的不同元素:

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

这使它更清楚我要采取什么行动,IMO。当然,如果您经常使用"查找元素,向它发送一些键"模式,您可能希望编写一个方便的方法,因此您可以调用:

EnterText("txtUserName", "TEST");
EnterText("txtPassword", "TEST123");
SubmitForm("buttonSignIn");

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

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