涵灵 发表于 2016-1-18 16:09:01

使用js点击按钮后webDriver无法获取alert窗口

本帖最后由 涵灵 于 2016-1-19 14:55 编辑

测试场景:点击增加按钮,出现弹出框,点击确定。
方式1:
1.点击按钮,调用selenium2的element.click(),没有反应,也不报错。
使用js执行:document.getElementsByName(elementName).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').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:58

alert需要switch的,你把switchto的代码加上就可以了

涵灵 发表于 2016-1-18 16:35:17

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:13

2楼正解:lol

mehll1213 发表于 2016-1-19 08:51:33

加一下等待时间试一下,可能是由于操作的太快,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:01

mehll1213 发表于 2016-1-19 08:51
加一下等待时间试一下,可能是由于操作的太快,alert真的还没有加载出来,用Thread.sleep(2000),或者
WebD ...

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

根本原因就是用js执行点击按钮,和手工返回的结果不一样。

清晨一缕阳光 发表于 2016-1-20 11:33:19

查看下你手工点击与代码执行有什么区别,把相应的过程中执行的是什么动作输出,然后对比下。

涵灵 发表于 2016-1-25 09:27:57

清晨一缕阳光 发表于 2016-1-20 11:33
查看下你手工点击与代码执行有什么区别,把相应的过程中执行的是什么动作输出,然后对比下。

如何输出过程中的动作?求指教。
页: [1]
查看完整版本: 使用js点击按钮后webDriver无法获取alert窗口