51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1574|回复: 1
打印 上一主题 下一主题

怪现象:京东页面元素 moveToElement 方法定位不准确,求解

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-11-8 14:58:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
准备实现以下目的:
   1、打开京东搜索页面,直接搜索“huawei”
   2、在页面底部有一个“重新搜索”按钮,此按钮旁边有一个超链显示“说说我使用搜索的感受”,用xpath方法定位此超链
   3、将页面滚动到这个超链位置(处于页面最下方)
   4、结果:定位不准确(定位到页面别的区域了)

实验一:
   get后如果不设等待时间,连续两次定位该超链元素:
        返回位置坐标不一致:
            第一次返回定位位置:(708, 7228)
            第二次返回定位位置:(708, 8023) —— 这次浏览器实际显示正确
        返回页面源文件不一致:
           第一次返回页面源文件: 代码量少
           第二次返回页面源文件: 代码量多,检查后发现是部分产品加载不完全

实验二:
   在get后加设置8秒等待时间,期望页面加载完全:
        返回位置坐标仍旧不一致:
            第一次返回定位位置:(708, 7228)
            第二次返回定位位置:(708, 8023) —— 这次浏览器实际显示正确
        返回页面源文件一致

这种情况怎么解决为好????(页面使用了懒加载,滚动窗口的时候又触发加载了)

  1.         public static void main(String[] args) throws InterruptedException, IOException{
  2.                 PrintStream ps1 = new PrintStream("log1.txt");
  3.                 PrintStream ps2 = new PrintStream("log2.txt");
  4.                 WebDriver driver = new FirefoxDriver();
  5.                 driver.manage().window().maximize();
  6.                
  7.                 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
  8.                
  9.                 System.out.println(df.format(new Date()));
  10.                 driver.get("http://search.jd.com/Search?keyword=huawei");
  11.                 System.out.println(df.format(new Date()));
  12.                
  13.                 // 加上等待时间,获取的两个页面源文件相同
  14.                 Thread.sleep(8000);
  15.        
  16.                 System.setOut(ps1);
  17.                 System.out.println(driver.getPageSource());
  18.                 WebElement e = driver.findElement(By.partialLinkText("说说我使用搜索的感受"));
  19.                 System.out.println(e.getLocation());
  20.                 System.out.println(e.isDisplayed());
  21.                 // 移动到页面元素,此时定位失败
  22.                 new Actions(driver).moveToElement(e).perform();
  23.                
  24.                 System.setOut(ps2);
  25.                 System.out.println(driver.getPageSource());
  26.                 WebElement k = driver.findElement(By.partialLinkText("说说我使用搜索的感受"));
  27.                 System.out.println(k.getLocation());
  28.                 // 移动到相同的页面元素,此时定位正确
  29.                 new Actions(driver).moveToElement(k).perform();
  30.         }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2016-11-8 15:55:28 | 只看该作者
难道只能苯办法,连续两次move,感觉中间卡顿一下

  1.         public static void main(String[] args) throws InterruptedException, IOException{
  2.                
  3.                 WebDriver driver = new FirefoxDriver();
  4.                 driver.manage().window().maximize();

  5.                 driver.get("http://search.jd.com/Search?keyword=huawei");
  6.                
  7.                 WebElement e = driver.findElement(By.partialLinkText("说说我使用搜索"));
  8.                 new Actions(driver).moveToElement(e).perform();
  9.                
  10.                 WebElement k = driver.findElement(By.partialLinkText("说说我使用搜索"));
  11.                 new Actions(driver).moveToElement(k).perform();
  12.         }
复制代码

评分

参与人数 1测试积点 +10 收起 理由
lsekfe + 10 积极分享奖励10测试积点

查看全部评分

回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-8 17:31 , Processed in 0.065422 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表