Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';我在Java中重用WebElement对象实例吗?_Java_Eclipse_Selenium_Selenium Webdriver_Selenium Chromedriver - Fatal编程技术网

为什么可以';我在Java中重用WebElement对象实例吗?

为什么可以';我在Java中重用WebElement对象实例吗?,java,eclipse,selenium,selenium-webdriver,selenium-chromedriver,Java,Eclipse,Selenium,Selenium Webdriver,Selenium Chromedriver,我是SeleniumWebDriver的新手,正在使用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?

我是SeleniumWebDriver的新手,正在使用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对象似乎没有意义。请给我一些见解,谢谢。

当您提交表单时,它会清除元素文本框本质上意味着已刷新,并且可能发生了其中一个/所有操作:

  • 一些新元素已添加到DOM中
  • DOM中不再存在一些旧元素
  • 某些DOM元素的属性可能已更改
  • 总之,HTMLDOM已经改变了
在这种情况下,如果您尝试执行以下操作:

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

因此,解决方案是重新搜索所需元素,然后调用
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");

您可以在页面对象模型中尝试页面工厂概念。 请参阅:

尝试以下代码:

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

第一种情况下会发生什么?你有什么例外?