为什么可以';我在Java中重用WebElement对象实例吗?
我是SeleniumWebDriver的新手,正在使用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?
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");
第一种情况下会发生什么?你有什么例外?