在使用selenium 进行测试的时候经常会碰到 ** element不存在的问题,而实际上这个元素是存在的
出现这个问题的主要原因是,当selenium去操作特定元素A的时候,这个A元素还没有加载完成在页面上没有显示出来,
selenium固然是找不到的
要解决这个问题一开始我是这样实现的:
Thread.sleep(10000),我先睡一会,然后去操作,或者使用selenium.wait(10000),等待一会再去操作
也或者使用 selenium.waitForPageToLoad(""); 但是这个方法是加载“新” 页面完成,如果不是新页面,如ajax操作的一个页面,这个方法就不灵了
自己写个方法,循环等待这个元素,如果这个元素存在就停止等待,否则超时后退出:
private void waitForAllElementLoad(String locator,long timeout){ for (int second = 0;; second++) { logger.error("waitForAllElementLoad=============>"+second); if (second >= timeout){logger.error("timeout");break;} if (selenium.isElementPresent(locator))break; try { selenium.wait(1000);//or Thread.sleep(1000); } catch (InterruptedException e) {e.printStackTrace();} } }
哈哈哈
扫描二维码关注公众号,回复:
1184989 查看本文章
刚刚经过测试:
这个方法更OK ,上面的大家可以不用看了
selenium.waitForCondition("var isExist = selenium.isElementPresent(\"css=input[value=创建]\");isExist==true", "30000");