如何使用moveTo()每个元素使用java覆盖selenium中的findElements()实现?

时间:2017-03-19 18:55:55

标签: selenium selenium-webdriver webdriver selenium-chromedriver selenium-ide

我正在使用selenium webDriver和Java,并通过在selenium定位时移动到List中的每个元素来寻找查找元素的解决方案。我正在寻找特定于“ChromeDriver”的解决方案,因为Chrome驱动程序使用点/坐标,每次我的脚本都无法执行拖放从一个位置识别到另一个位置的元素列表。

场景描述:我的应用程序有两个表(T1和T2),每个表行下有'li和ui'列表作为子项。我需要将'T2'行/行的'web元素'拖放到'T1'行下的匹配web元素(在拖放期间,视口中可见或不可见 - 但我使用了moveTo()方法)

问题:当我在Chrome中执行脚本时,点击当前视口“T2”中不存在的网页元素并将其拖动到“T1”中匹配的“父网页元素”。但是在第一次运行之后,由于“先前”标识的元素位置发生了变化,网页对齐中断以及随后的拖放操作失败。

我尝试了多种方法,例如,单击'T2元素1并移动并执行拖放操作,使用javascript执行程序在视口中显示元素等。但每次UI对齐都会中断。

我想知道,如果有人使用MoveTo()函数自定义实现'Selenium FindElements()方法'?

  

类似的东西:

@Override
        public List<WebElement> findElements(By arg0) {
            List<WebElement> moveAndFind = null;
            try{
                WebElement firstIndex = Driver.findElement();//Move to first matching element of By argument.
                moveAndFind.add(firstIndex); // Collect all the matching elements in the web page by capturing the updated location - specific to Chrome driver
            }catch(WebDriverException ex){
                ex.printStackTrace();
            }
            return moveAndFind;
        }

1 个答案:

答案 0 :(得分:0)

要专门回答你的问题,你不能override FindElement的实现(或者,因为我不熟悉Java实现,我不知道什么)。< / p>

现在,为了解决您的问题,您有以下几种选择:

  1. 由于您已经创建了列表,因此您始终可以从列表末尾移动。这样,元素的顺序始终与初始索引相同。
  2. 除了索引之外,使用lambda表达式来标识列表中的元素。
  3. 每次移动元素后刷新并重新构建列表。根据您需要移动的元素数量,这可能是性能更差的选择。