laoshan 发表于 2016-11-8 14:58:50

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

准备实现以下目的:
   1、打开京东搜索页面,直接搜索“huawei”
   2、在页面底部有一个“重新搜索”按钮,此按钮旁边有一个超链显示“说说我使用搜索的感受”,用xpath方法定位此超链
   3、将页面滚动到这个超链位置(处于页面最下方)
   4、结果:定位不准确(定位到页面别的区域了)

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

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

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

        public static void main(String[] args) throws InterruptedException, IOException{
                PrintStream ps1 = new PrintStream("log1.txt");
                PrintStream ps2 = new PrintStream("log2.txt");
                WebDriver driver = new FirefoxDriver();
                driver.manage().window().maximize();
               
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
               
                System.out.println(df.format(new Date()));
                driver.get("http://search.jd.com/Search?keyword=huawei");
                System.out.println(df.format(new Date()));
               
                // 加上等待时间,获取的两个页面源文件相同
                Thread.sleep(8000);
       
                System.setOut(ps1);
                System.out.println(driver.getPageSource());
                WebElement e = driver.findElement(By.partialLinkText("说说我使用搜索的感受"));
                System.out.println(e.getLocation());
                System.out.println(e.isDisplayed());
                // 移动到页面元素,此时定位失败
                new Actions(driver).moveToElement(e).perform();
               
                System.setOut(ps2);
                System.out.println(driver.getPageSource());
                WebElement k = driver.findElement(By.partialLinkText("说说我使用搜索的感受"));
                System.out.println(k.getLocation());
                // 移动到相同的页面元素,此时定位正确
                new Actions(driver).moveToElement(k).perform();
        }

laoshan 发表于 2016-11-8 15:55:28

难道只能苯办法,连续两次move,感觉中间卡顿一下:D

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

                driver.get("http://search.jd.com/Search?keyword=huawei");
               
                WebElement e = driver.findElement(By.partialLinkText("说说我使用搜索"));
                new Actions(driver).moveToElement(e).perform();
               
                WebElement k = driver.findElement(By.partialLinkText("说说我使用搜索"));
                new Actions(driver).moveToElement(k).perform();
        }
页: [1]
查看完整版本: 怪现象:京东页面元素 moveToElement 方法定位不准确,求解