51Testing软件测试论坛

标题: selenium java如何定位跳转页面的元素 [打印本页]

作者: zym01    时间: 2015-11-20 17:53
标题: selenium java如何定位跳转页面的元素
我用java写了一个登陆用例,输入用户名和密码点击登陆按钮后登陆成功,然后就定位不到跳转页面的元素。登陆时跳转是原地跳转,handle是同一个;同时应该不是frame之间的跳转,而是通过js或Servlet验证后直接跳转到另外一个html。请问怎么解决啊???
作者: wupanpan    时间: 2015-11-22 11:41
赞赞赞赞赞赞赞
作者: joykao    时间: 2015-11-23 09:56
是不是没有加上等待呢?还没捕捉到元素就结束了。。。。还有你确保你要抓取的元素的属性描述的对哦
作者: zym01    时间: 2015-11-23 11:24
joykao 发表于 2015-11-23 09:56
是不是没有加上等待呢?还没捕捉到元素就结束了。。。。还有你确保你要抓取的元素的属性描述的对哦

我可以确认抓取的元素属性描述是正确的,因为我用driver.navigate().to()试过。那就我描述的这种情况,那个等待语句怎么写呢?我在百度上搜索的语句感觉不适合,他没用frame,handle又一样。。。
                   WebDriverWait wait = new WebDriverWait(driver, 70);
                    wait.until(new ExpectedCondition<Boolean>() {
                            public Boolean apply(WebDriver d){
                               boolean loadcomplete = d.switchTo().frame("right_frame").findElement(By.xpath("//center/div[@class='welco']/img")).isDisplayed();
                               return loadcomplete;
                           }
                       });
作者: zym01    时间: 2015-11-23 11:24
joykao 发表于 2015-11-23 09:56
是不是没有加上等待呢?还没捕捉到元素就结束了。。。。还有你确保你要抓取的元素的属性描述的对哦

我可以确认抓取的元素属性描述是正确的,因为我用driver.navigate().to()试过。那就我描述的这种情况,那个等待语句怎么写呢?我在百度上搜索的语句感觉不适合,他没用frame,handle又一样。。。
                   WebDriverWait wait = new WebDriverWait(driver, 70);
                    wait.until(new ExpectedCondition<Boolean>() {
                            public Boolean apply(WebDriver d){
                               boolean loadcomplete = d.switchTo().frame("right_frame").findElement(By.xpath("//center/div[@class='welco']/img")).isDisplayed();
                               return loadcomplete;
                           }
                       });
作者: joykao    时间: 2015-11-23 17:50
zym01 发表于 2015-11-23 11:24
我可以确认抓取的元素属性描述是正确的,因为我用driver.navigate().to()试过。那就我描述的这种情况,那 ...

等待有显示等待和隐式等待等等,当然你已经用了一种,还有一种
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
当然你也可以用Thread.sleep(3000)是试试,不知道是不是有请求没加载完
如果你确定没有描述错元素属性的话,因为我不知道你driver.navigate().to()可以对元素做什么?我的理解是只能帮你去打开页面,而且你又说元素不在新打开的页面上,而且也没有用多frame,个人觉得十分奇怪,你可以把元素的HTML代码贴出来看看

作者: zym01    时间: 2015-11-25 09:59
joykao 发表于 2015-11-23 17:50
等待有显示等待和隐式等待等等,当然你已经用了一种,还有一种
driver.manage().timeouts().implicitlyW ...

我试过用driver.manage().timeouts().implicitlyWait(120,TimeUnit.SECONDS);和sleep()都不行,你看下代码吧!
登陆页面html:
<body>
        <div class="top">
            <div class="top_box">
                <div class="logo"></div>
                <div class="logo_right"></div>
            </div>
        </div>
        <div class="top_line"></div>
        <div class="banner">
            <div class="login_box">
                <table width="100%" cellspacing="0" cellpadding="0" border="0">
                    <form action="call.login" name="loginform" method="post" id="signin-form"></form>
                        <tbody><tr>
                            <td class="title">&nbsp;</td>
                        </tr>
                        <tr>
                            <td class="login_text">用户名:</td>
                        </tr>
                        <tr>
                            <td><input type="text" placeholder="请输入用户名" onkeydown="keydown()" id="inputuser" class="login_input" name="username"></td>
                        </tr>
                        <tr>
                            <td class="login_text">密码:</td>
                        </tr>
                        <tr>
                            <td><input type="password" placeholder="请输入密码" onkeydown="keydown()" class="login_input" name="password"></td>
                        </tr>
                        <tr>
                            <td><input type="button" value="登             录" class="login_button" name="loginbtn"></td>
                        </tr>
                                       
                 </tbody></table>
                </div>
            </div>
            <div class="info">版权所有:XXX </div>
            <!-- Placed at the end of the document so the pages load faster -->
            <script type="text/javascript" src="3rd/jquery.min.js"></script>
            <script type="text/javascript" src="3rd/jquery.form.js"></script>
            <script type="text/javascript">
            function keydown(){
                    if(event.keyCode == 13){
                            event.returnValue=false;
                            event.cancel = true;
                            loginform.loginbtn.click();
                    }
            }
            
            $(function(){
                $('#inputuser').focus();
                               
                $('.login_button').on('click',function(){
                     $("#signin-form").ajaxSubmit({
                         success:function(data){
                            data = JSON.parse(data);
                            if (data.success) {
                                window.location.href = "main.html";
                            } else {
                                alert(data.message);
                                $('#inputuser').focus();
                                $('#inputuser').select();
                            }
                           
                         }
                     });
                })
               
               
            });

            </script>
登陆成功跳转页面html:
<body style="margin:0px;height:100%;overflow:hidden;background:#fff">
<iframe frameborder="0" scrolling="no" style="height:100%;width:100%" src="mas/home/index.html"></iframe>





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