背景:在公司网站进行测试时,登陆后有个侧边栏弹出,需要手动关闭,不然 后续会遮挡其他元素。
侧边栏类似下面的图片
写测试用例代码时,思路就是登陆之后,点击右上角×号进行关闭,代码如下:
Thread.sleep(3000); campaignPage.closeManagerBox();
具体关闭代码如下
WebElement e = driver.findElement(By.xpath("//*[@id=\"cm_more\"]//a[@class=\"weiboyiTool weiboyiTool_close fr js_cm_close\"]"));
e.click();
登陆之后等待3s,再进行关闭侧边栏操作,然后使用chrome浏览器执行测试用例时,执行成功。但是同样的代码在Firefox浏览器上执行时,却报错,报错信息如下:
解决方案:
通过查询资料和亲身试验,有以下几种方法:
1、增加等待时间。(成功)
Thread.sleep(3000);
原来是等待3s,我设置成等待10s,执行成功。但是这种方法有个弊端,等待时间不好确定,而且会影响测试用例的执行速度。
2、执行JS语句进行关闭。(Firefox和chrome均失败,未能成功关闭弹框)
WebElement e = driver.findElement(By.xpath("//*[@id=\"cm_more\"]//a[@class=\"weiboyiTool weiboyiTool_close fr js_cm_close\"]")); //e.click(); ((JavascriptExecutor)driver).executeScript("arguments[0].click;",e);
3、使用Actions进行操作。(Firefox全失败,未能成功关闭;chrome语句1和2可以成功关闭,3不行)
Actions action = new Actions(driver); //1 action.moveToElement(e).click().perform(); //2 action.moveToElement(e).click().build().perform(); //3 action.moveToElement(e).clickAndHold(e).build().perform();
1、2、3三种方法。有很多同行的文章说解决了问题,但我试验了很多次都没有成功,请大家自行验证。
版本信息:geckodriver-v0.19.1-win64、Firefox是58.0.1
因为Firefox进行了大的更新,不知和这个问题是否有关,待后续验证,欢迎同行一起探讨。
还有另外一个疑惑点,为什么我设置的隐性等待没有起作用?
版权声明:本文为kennin19840715原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。