Java 在测试ajax时,是否可以刷新Selenium中的Select对象
当我在进行selenium测试时,我在网站上测试一些ajax功能时遇到了一个问题。我在线程“main”org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM中时遇到错误Java 在测试ajax时,是否可以刷新Selenium中的Select对象,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,当我在进行selenium测试时,我在网站上测试一些ajax功能时遇到了一个问题。我在线程“main”org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM中时遇到错误异常 在查找了大量内容之后,我知道我之所以会出现此错误,是因为我在第一个select对象中访问的元素被考虑在内,因为ajax重新加载了站点的该部分 为了避免这个异常,我每次都创建了一个新的select对象。重新加载页面时,xpath不会更改 是否可以使用对象的新x
异常
在查找了大量内容之后,我知道我之所以会出现此错误,是因为我在第一个select对象中访问的元素被考虑在内,因为ajax重新加载了站点的该部分
为了避免这个异常,我每次都创建了一个新的select对象。重新加载页面时,xpath不会更改
是否可以使用对象的新xpath刷新Select,而不是每次创建一个新的xpath
谢谢你的帮助
public static boolean ajaxFunctionalityFF() throws InterruptedException {
int rowCount=driver.findElements(By.xpath("//table[@class='classname']/tbody/tr")).size();
rowSizes.add(rowCount);
Select ajaxSelector = new Select(driver.findElement(By.id("edit-term")));
ajaxSelector.selectByVisibleText("-Beef);
Thread.sleep(4000);
rowCount=driver.findElements(By.xpath("//table[@class='classname']/tbody/tr")).size();
rowSizes.add(rowCount);
totalElements = totalElements + rowCount;
Select ajaxSelector2 = new Select(driver.findElement(By.id("edit-term"))); //create a new one to fix the stale element exception
ajaxSelector2.selectByVisibleText("-Cattle");
Thread.sleep(4000);
rowCount=driver.findElements(By.xpath("//table[@class='classname']/tbody/tr")).size();
每次刷新HTML的该部分时,您都需要获取它。我会做类似的事情
private By selectLocator = By.id("edit-term");
public static boolean ajaxFunctionalityFF() throws InterruptedException
{
...
Select ajaxSelector = getSelect();
...
ajaxSelector = getSelect();
ajaxSelector.selectByVisibleText("-Cattle");
...
}
public static Select getSelect()
{
return new Select(driver.findElement(selectLocator));
}
我通常在这种情况下使用的一种解决方法如下:
do
{
try
{
WebElement element=FindThatElement;
element.performSomeAction();
break;
}
catch(StaleElementException | //Any Other unExpectedException e)
{
//continue do while loop;
}
} while(1>0);
您是否尝试过显式/流畅地等待并查看是否可以使用相同的select元素?另外,当你说页面部分正在刷新时,是否意味着你的select元素也在刷新?不是显式的/fluent等待,但我确实在整个方法中使用了Thread.Sleep()
只是看看状态是否会有任何变化。select元素正在刷新,因为它填充了一个新值,但仍然是相同的xpath。这是一个下拉列表,selectByVisibleText
只是在其中选择了不同的选项。然后,在选择第一个选项后,您可能应该尝试使用fluent waits等待元素。试试这个-WebDriverWait wait=newwebdriverwait(driver,20);wait.till(ExpectedConditions.presenceOfElementLocated(By.id(“编辑术语”)))代码>。如果仍然不起作用,请告诉我。另请检查。将ajaxSelector2原因替换为fluent wait会导致与之前相同的错误,即引用过时。谢谢,如果再次发生,请务必记住。