为什么80%的码农都做不了架构师?>>>   

因为页面内容有很多页,需要切换页数,但是切换跳转到第二页的时候,页面首先会自动刷新,导致出现如下异常:Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

 //获取当前页面的table内容static int count = 0;public static List getPageTableContent(WebDriver driver,WebElement table,String refreshElement ){//获取当前页面的table
//把下面这行代码的注释去掉即可
//      table= driver.findElement(By.xpath(refreshElement));List<WebElement> rows = table.findElements(By.tagName("tr"));//根据行标签,获取所有行对象//String[] tableTitle = {"编号","配置名称","首页返回按钮","首页banner显示","极简尾页",""};ArrayList<String> tableContent = new ArrayList<>();for(WebElement row:rows){//从所有行中遍历每一行List<WebElement> col = row.findElements(By.tagName("td"));//一行中,所有列标签,for(WebElement cell:col){//一行中,所有的列(也就是单元格)String content = cell.getText();//每个单元格的内容tableContent.add(content);//System.out.println(content + "...content");//System.out.println(driver.findElement(By.xpath("//td[contains(text(),'可以')]")).getText() + "...findElement");}}return tableContent;}//获取总页数public static int getPageAllNo(WebDriver driver){//获取总页数String pageCountSumStr = driver.findElement(By.xpath("//*[@id='product_mgt_wrap']/div/div[2]/div[3]/table/tbody/tr/td[8]/span")).getText();int pageCountSum = Integer.parseInt(pageCountSumStr.substring(3));return pageCountSum;}//获取当前页数public static int getCurrentPageNo(WebDriver driver){String pageCountSumStr = driver.findElement(By.xpath("//*[@id='product_mgt_wrap']/div/div[2]/div[3]/table/tbody/tr/td[8]/span")).getText();//获取当前页面页数String pageSource = driver.getPageSource();//获取当前页的源文件String pageElement = "pagination-num\" type=\"text\" value=\"";//在源文件中查找含有该字段的位置int pageIndex = pageSource.indexOf(pageElement);//通过上面的字段位置,定位文本框中的当前页数//通过定位出来的位置,获取文本框中的值 }//根据表格单元个内容定位单元格所在行/*** @author:苏一叶 email:by.su@qq.com* 1.进来先获取页面的总页数* 2.如果总页数大于1* 3.把每一条记录所有字段和记录所在的当前页数存入json中,表头为Key,值为Value。* #3.把每一条记录中除编号外的其他字段和记录所在的当前页数存入json中,编号作为Key,其他已经存入json作为Value存入HashMap中。* 4.传入需要定位的字符串,根据字符在json中查找对应的页数,把所有含有该字符的记录存到* @throws InterruptedException */public static void getRangeFromRows(WebDriver driver,String str) throws InterruptedException{int pageCountSum = getPageAllNo(driver);//获取总页数int currentPageCount = getCurrentPageNo(driver);//获取当前页数//需要定位元素的xpathString strContent = "//*[contains(text(),'" + str + "')]";//获取当前页面的tableString refreshElement = "//*[@id='product_mgt_wrap']/div[1]/div[2]/div[2]/div[2]/div[2]/table";WebElement table= driver.findElement(By.xpath(refreshElement));if(pageCountSum == 1){ArrayList<String> tableContent = (ArrayList)getPageTableContent(driver,table,refreshElement);for(String content:tableContent){if(content.contains(str)){//若包含需要查找定位的关键字strdriver.findElement(By.xpath(strContent)).click();}}}else{//页面总数大于1的时候boolean flag = false;//设置一个跳出的标志位for(int i=0;i<pageCountSum&&!flag;i++){//当前页面等于1的时候if(currentPageCount==1){ArrayList<String> tableContent = (ArrayList)getPageTableContent(driver,table,refreshElement);for(String content:tableContent){if(content.contains(str)){//若包含需要查找定位的关键字strdriver.findElement(By.xpath(strContent)).click();flag = true;//若找到,即跳转出循环break;//退出该循环体}}Thread.sleep(1000);currentPageCount += 1;//设置页数为2,页数大于1,逻辑转到else下面的代码块}else{//点击下一页的按钮,页面跳转到下一页,从第1页跳转到第2页driver.findElement(By.xpath("//*[@id='product_mgt_wrap']/div/div[2]/div[3]/table/tbody/tr/td[10]/a/span/span[2]")).click();Thread.sleep(1500);//从第2页开始,每翻一页,都进行查找定位for(int n=2;n<=pageCountSum&&!flag;n++){ArrayList<String> tableContent = (ArrayList)getPageTableContent(driver,table);//点击下一页按钮driver.findElement(By.xpath("//*[@id='product_mgt_wrap']/div/div[2]/div[3]/table/tbody/tr/td[10]/a/span/span[2]")).click();Thread.sleep(1000);currentPageCount = getCurrentPageNo(driver);//获取跳转后的页数for(String content:tableContent){if(content.contains(str)){//若包含需要查找定位的关键字strdriver.findElement(By.xpath(strContent)).click();flag = true;//找到定位跳转到flag标志位}}/*//获取所有页面的内容tableContentAll.addAll((ArrayList)getPageTableContent(driver,table,refreshElement));*/}}}Thread.sleep(1000);}}

参考自:

http://www.cnblogs.com/fengpingfan/p/4583325.html

http://stackoverflow.com/questions/28066135/org-openqa-selenium-staleelementreferenceexception-stale-element-reference-ele

转载于:https://my.oschina.net/bysu/blog/833382

java+selenium报异常org.openqa.selenium.StaleElementReferenceException的解决方案相关推荐

  1. java.lang.IllegalStateException异常:简单的分析和简单解决方案

    java.lang.IllegalStateException异常:简单的分析和简单解决方案 参考文章: (1)java.lang.IllegalStateException异常:简单的分析和简单解决 ...

  2. Java里面jvr_微信小程序java解密报异常Key length not 128/192/256 bits

    异常 org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$InvalidKeyOrParametersException: ...

  3. selenium报异常:it is not in the current frame context, or the document has been refreshed

    问题描述:下拉框选择了某个值去查询,查询后将下拉框复原为默认值,出现了异常提醒. 1.代码及报错 代码 def type_query(self,target_loc,row):try:ele_sel ...

  4. java制造null异常_Java中NullPointerException的完美解决方案

    null在Java中带来的麻烦 我相信所有的Java程序猿一定都遇到过NullPointerException,空指针在Java程序中是最常见的,也是最烦人的:它让我们很多程序猿产生了根深蒂固的感觉, ...

  5. java 设置不可点击_Java Selenium webdriverwait 解决元素不可点击问题

    webdriver有两种等待方式:显式等待和隐式等待 因为现在大部分的web应用程序会使用AJAX技术.AJAX技术简单来说就是异步JavaScript和xml,是一种用户创建快速动态网页的技术,AJ ...

  6. java web 多语言_基于 Selenium WebDriver 实现多语言环境下自动化截图

    到此,一个 Junit4 test case 就在 Eclipse 中建成 , 如代码清单 1. 清单 1. 将脚本导入 Eclipse package com.example.casePackage ...

  7. java爬虫(一)用selenium驱动IE和谷歌浏览器模拟点击网页

    我们公司的需求总是那么折磨人,最近要做模拟人一步步点击拼多多商品发起支付然后得到最后一步的链接.那么之前学的selenium就派上用场了,在本篇博客我将带大家学会Java爬虫的第一步,用seleniu ...

  8. selenium火狐驱动_在Selenium Firefox驱动程序上运行测试

    selenium火狐驱动 带有Selenium 3.0的Gecko Marionette Firefox驱动程序 (Gecko Marionette Firefox Driver with Selen ...

  9. selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素

    selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...

最新文章

  1. Sciences:用膳食纤维钓出15株缓解糖尿病的细菌!
  2. 非常可乐(杭州电子科技大学第四届大学生程序设计竞赛)(九度2013年教程87题)
  3. 从零到两百台服务器的创业野蛮生长史
  4. HDU.2561 第二小整数(water)
  5. 微信小程序中的渐变色
  6. names文件和data文件_data.table让你的读取速度提升百倍
  7. UDP打洞NAT大致分为下面四类 P2P
  8. java调用shell脚本及注意事项
  9. c++ 不能分配给为0的数组_【嵌入式C】你有想过quot;数组下标quot;为何从0开始吗?...
  10. 如何查看文件的字符集
  11. mysql索引实例_mysql索引之十:Mysql 索引案例学习
  12. waring Release版本
  13. Spring Boot核心注解讲解
  14. Excel数据分析实例
  15. 【活动报名】NEO 区块链公开课(1): NEO 区块链开发入门
  16. 慕课2022沟通心理学答案
  17. 【python】db.Column(db.Integer, primary_key=True, autoincrement=True)
  18. sony6000正在连接服务器,极速对焦+11张每秒连拍 Sony A6000评测
  19. linux用户和用户配置文件(nobody)
  20. vue中的插槽--slot和v-slot

热门文章

  1. python发布_python如何发布模块
  2. gcc编译的几个重要参数
  3. matlab连通域分割_MATLAB车牌识别之7个字符切割浅谈【抽丝剥茧】
  4. java开发http协议接口_java开发接口利用http协议传输数据
  5. 陕西师范大学计算机科学学院保研院校,陕西师范大学计算机科学学院量子信息学保研细则...
  6. oracle update并行,Oracle update 优化方式,tuning update!
  7. redis 缓存模式
  8. python __iter____next__
  9. Hadoop HIVE 安装配置(单机集群)
  10. 1.6 语言模型和序列生成