使用循环导航到下一页时Selenium获取Stale异常

时间:2016-08-31 11:11:32

标签: java selenium

列出所有国家/地区和语言后,我想导航到下一页。以下是我正在使用的代码。使用此代码,我获得了第一个国家/地区数据,在此之后我得到了Stale异常。

    int indexGroupRow = 0;  
    for (WebElement rowElement:listRows) 
    {
      if (rowElement.getAttribute("class").contains("dxgvGroupRow") 
          && rowElement.getAttribute("id").contains("Content_gvCountries_DXGroupRowExp"+indexGroupRow))
      {
           String t = rowElement.getText();
           System.out.println("Country: "+t);
      }
      if (rowElement.getAttribute("class").contains("dxgvDataRow") 
          && rowElement.getAttribute("id").contains("Content_gvCountries_DXDataRow"+indexGroupRow))
      {
           String t1 = rowElement.getText();
           System.out.println("Available Language: " + t1);
           List<WebElement> linkElement = rowElement.findElements(By.xpath("td[position()>1]"));
           for (WebElement er: linkElement)
           {
               er.findElement(By.xpath("//*[@id='Content_gvCountries_cell" 
                   + indexGroupRow 
                   + "_2_lnkSelectCountry_" 
                   + indexGroupRow + "']")).click();
           }
      }
      indexGroupRow++;
   }
  

org.openqa.selenium.StaleElementReferenceException:陈旧元素   reference:元素未附加到页面文档(Session   info:chrome = 52.0.2743.116)(驱动信息:chromedriver = 2.16.333243   (0bfa1d3575fc1044244f21ddb82bf870944ef961),platform = Windows NT 6.1 SP1   x86_64)(警告:服务器未提供任何堆栈跟踪   信息)命令持续时间或超时:26毫秒   有关此错误的文档,请访问:   http://seleniumhq.org/exceptions/stale_element_reference.html建立   info:version:'2.53.1',修订版:   'a36b8b1cd5757287168e54b817830adce9b0158d',时间:'2016-06-30   19:26:09'系统信息:主持人:'WINJITLAPTOP96',ip:'192.168.224.1',   os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',   java.version:'1.7.0_67'会话ID:adf74ce205fd64d8b3d5c5064781985b   驱动程序信息:org.openqa.selenium.chrome.ChromeDriver功能   [{platform = XP,acceptSslCerts = true,javascriptEnabled = true,   browserName =铬,   铬= {userDataDir = C:\ Users \用户deepakv \应用程序数据\本地\ TEMP \ scoped_dir11036_1170},   rotating = false,locationContextEnabled = true,   mobileEmulationEnabled = false,version = 52.0.2743.116,   takesHeapSnapshot = true,cssSelectorsEnabled = true,   databaseEnabled = false,handlesAlerts = true,   browserConnectionEnabled = false,webStorageEnabled = true,   nativeEvents = true,hasTouchScreen = false,   applicationCacheEnabled = false,takeScreenshot = true}] at   sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)     在   sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)     在   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)     at java.lang.reflect.Constructor.newInstance(Constructor.java:526)     在   org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)     在   org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)     在   org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)     在   org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327)     在   org.openqa.selenium.remote.RemoteWebElement.getText(RemoteWebElement.java:179)     在LoginTest.testLogin(LoginTest.java:61)断开连接   目标VM,地址:'127.0.0.1:23563',传输:'socket'

1 个答案:

答案 0 :(得分:1)

for (WebElement er: linkElement)
       {
           er.findElement(By.xpath("//*[@id='Content_gvCountries_cell" + indexGroupRow + "_2_lnkSelectCountry_" + indexGroupRow + "']")).click();
       }

第一次单击后会丢失另一个链接,因此驱动程序无法从linkElement列表中单击第二个元素(因为它属于上一页)。 每次点击后,您需要找到下一页的链接