51Testing软件测试论坛

标题: 使用js点击按钮后webDriver无法获取alert窗口 [打印本页]

作者: 涵灵    时间: 2016-1-18 16:09
标题: 使用js点击按钮后webDriver无法获取alert窗口
本帖最后由 涵灵 于 2016-1-19 14:55 编辑

测试场景:点击增加按钮,出现弹出框,点击确定。
方式1:
1.点击按钮,调用selenium2的element.click(),没有反应,也不报错。
使用js执行:document.getElementsByName(elementName)[0].click(); 可行。
2.但是提示:No alert is active

方式2:
1.手工点击按钮;
2.webdriver可获取alert窗口,执行accept

按钮源码如下:
<input name="addbutton" class="cssButton" type="button" value="增加"/>

JS调用代码:
String js = "document.getElementsByName('addbutton')[0].click();" ;
JavascriptExecutor js_exe = (JavascriptExecutor)driver;  
js_exe.executeScript(js);  

疑问:使用js调用之后,为什么webdriver就获取不到alert窗口了呢?求解救方案


补充问题:
整个页面的元素可以用driver.findElement(By.name(elementName))找到,并读取其属性,就是变更的操作总是不能实现。
例如:输入框不能sendKeys,按钮不能click...
是不是页面设置了什么东西不能自动化??求解。。。。
备注:手工录入,点击都是没有问题的。


作者: joykao    时间: 2016-1-18 16:28
alert需要switch的,你把switchto的代码加上就可以了
作者: 涵灵    时间: 2016-1-18 16:35
joykao 发表于 2016-1-18 16:28
alert需要switch的,你把switchto的代码加上就可以了

我有加switch:
Alert alert = driver.switchTo().alert();               
alert.accept();

没加的话,是不会提示:No alert is active
作者: 清晨一缕阳光    时间: 2016-1-18 16:41
2楼正解
作者: mehll1213    时间: 2016-1-19 08:51
加一下等待时间试一下,可能是由于操作的太快,alert真的还没有加载出来,用Thread.sleep(2000),或者
WebDriverWait wait = new WebDriverWait(driver, 10);
                wait.until(new ExpectedCondition<WebElement>() {
                        @Override
                        public WebElement apply(WebDriver d) {
                                return d.findElement(By.id("alertid"));
                        }
                }).click();
作者: 涵灵    时间: 2016-1-19 11:41
mehll1213 发表于 2016-1-19 08:51
加一下等待时间试一下,可能是由于操作的太快,alert真的还没有加载出来,用Thread.sleep(2000),或者
WebD ...

试了一下,不是这个原因。
如果是加载慢的话,手工点击按钮后,为什么可以捕获alert窗口。

根本原因就是用js执行点击按钮,和手工返回的结果不一样。
作者: 清晨一缕阳光    时间: 2016-1-20 11:33
查看下你手工点击与代码执行有什么区别,把相应的过程中执行的是什么动作输出,然后对比下。
作者: 涵灵    时间: 2016-1-25 09:27
清晨一缕阳光 发表于 2016-1-20 11:33
查看下你手工点击与代码执行有什么区别,把相应的过程中执行的是什么动作输出,然后对比下。

如何输出过程中的动作?求指教。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2