为什么我不能在Java中重用WebElement对象实例?

时间:2018-04-22 18:48:14

标签: java eclipse selenium selenium-webdriver selenium-chromedriver

我是selenium webdriver的新手,我正在使用java测试表单,我遇到了无法重用WebElement实例的问题

WebElement element = driver.findElement(By.name("number"));
element.sendKeys("4");

// submit form this clears the element text box

element.sendKeys("7");  // this won't type 7 in the box?

但这有效:

WebElement element = driver.findElement(By.name("number"));
element.sendKeys("4");

// submit form this clears the element text box

WebElement element2 = driver.findElement(By.name("number"));
element2.sendKeys("7"); 

似乎没有必要实例化另一个webelement对象。请给我见解,谢谢。

3 个答案:

答案 0 :(得分:0)

当您提交表单时,清除元素文本框实质上意味着HTML DOM已刷新,可能已经/所有操作都已发生:< / p>

  • 一些新元素已添加到 DOM
  • DOM 中不再存在一些旧元素。
  • 某些 DOM 元素的属性可能已更改。
  • 缩短 HTML DOM 已更改。

在这种情况下,如果您尝试:

WebElement element = driver.findElement(By.name("number"));
element.sendKeys("4");
// submit form this clears the element text box
element.sendKeys("7");

Selenium会抱怨StaleElementReferenceException

因此,解决方案是重新搜索所需元素,然后按如下方式调用sendKeys()方法:

WebElement element = driver.findElement(By.name("number"));
element.sendKeys("4");
// submit form this clears the element text box
WebElement element2 = driver.findElement(By.name("number"));
element2.sendKeys("7");

答案 1 :(得分:0)

您可以在页面对象模型中尝试页面工厂概念。 请参阅:http://toolsqa.com/selenium-webdriver/page-object-pattern-model-page-factory/

答案 2 :(得分:0)

试试这段代码:

WebElement element = driver.findElement(By.name("number"));  
element.sendKeys("4");  

// submit form this clears the element text box  

driver.navigate().refresh();  
(new WebDriverWait(driver,10)).until(ExpectedConditions.elementToBeClickable(By.name("number")));

element.sendKeys("7");