51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2602|回复: 18
打印 上一主题 下一主题

selenium定位报错

[复制链接]
  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    跳转到指定楼层
    1#
    发表于 2016-8-22 11:45:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 sunliz 于 2016-8-22 14:24 编辑

    点击菜单按钮后跳转到新的页面,想定位点击新页面的按钮
    使用ID定位报错,xpath和css定位也一样
    org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//input[@id=newGroup]"}

    用IDE录制的脚本显示ERROR
    public void testNewVersion() throws Exception {
        driver.get(baseUrl + "/");
        // ERROR: Caught exception [ERROR: Unsupported command [selectFrame | mainFrame | ]]
        driver.findElement(By.id("newGroup")).click();
        driver.findElement(By.name("stype")).click();
      }

    尝试switchTo().frame()切换表单也没用,而且点击其他按钮进入的页面表单也叫mainFrame

    那个error不太懂怎么回事,也搜不到,求教该怎么办啊


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 1182 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2016-8-22 12:11:15 | 只看该作者
    在定位元素之前增加等待时间,等待页面加载完成;

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    3#
     楼主| 发表于 2016-8-22 14:11:44 | 只看该作者
    清晨一缕阳光 发表于 2016-8-22 12:11
    在定位元素之前增加等待时间,等待页面加载完成;

    设置了,也没有用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    4#
     楼主| 发表于 2016-8-22 14:12:05 | 只看该作者
    清晨一缕阳光 发表于 2016-8-22 12:11
    在定位元素之前增加等待时间,等待页面加载完成;

    设置了,也没有用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    5#
     楼主| 发表于 2016-8-22 14:12:08 | 只看该作者
    清晨一缕阳光 发表于 2016-8-22 12:11
    在定位元素之前增加等待时间,等待页面加载完成;

    设置了,也没有用
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    6#
    发表于 2016-8-22 15:09:41 | 只看该作者
    那个切换frame(录制脚本是录不出来这个的)是必须有的,把你完整的脚本贴出来给大伙看看。

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    7#
     楼主| 发表于 2016-8-22 15:15:06 | 只看该作者
    若尘_51 发表于 2016-8-22 15:09
    那个切换frame(录制脚本是录不出来这个的)是必须有的,把你完整的脚本贴出来给大伙看看。

    public class FirstLogin {
             public WebDriver driver;
             WebElement  drop_down;
      @Test
              public void login() {
                      System.out.println("srart selenium");
                      driver = new FirefoxDriver();
                      driver.get("http://ip/login");
                      System.out.println(driver.getTitle());
                      System.out.println(driver.getCurrentUrl());

                      /*登录
                       */
                      driver.findElement(By.id("username")).sendKeys("username");
                      driver.findElement(By.id("password")).sendKeys("password");
                      driver.findElement(By.className("login-but")).click();
                      System.out.println("The title after login is:"+driver.getTitle()); //显示登录后的title
                      System.out.println("The url after login is:"+driver.getCurrentUrl());//显示登录后的url

                     
                      //跳转到创意管理页面
                     driver.findElement(By.xpath("//ul[@id='menubox']/li/a/span[2]")).click();
                     driver.findElement(By.linkText("推广计划管理")).click();
                     driver.findElement(By.linkText("创意管理")).click();
                     
                     //跳转的新建创意组页面
                     driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
                     driver.switchTo().frame("mainFrame");
                    driver.findElement(By.id("newGroup")).click();//*[@id="newGroup"]
                    driver.findElement(By.name("stype")).click();
                     
      }
      @AfterTest
      public void afterTest() {
              //driver.close();
      }

    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    8#
    发表于 2016-8-22 15:53:07 | 只看该作者
    sunliz 发表于 2016-8-22 15:15
    public class FirstLogin {
             public WebDriver driver;
             WebElement  drop_down;

    是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    9#
    发表于 2016-8-22 16:02:27 | 只看该作者
    换成Xpath或者name定位试试,或者前面加上元素的父节点,但是不加事件
    比如
    driver.findElement(By.id("searchForm"))
    driver.findElement(By.id("newGroup")).click()

    评分

    参与人数 1测试积点 +10 收起 理由
    lsekfe + 10 积极回复获得测试积点10

    查看全部评分

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2020-12-8 11:20
  • 签到天数: 605 天

    连续签到: 1 天

    [LV.9]测试副司令

    10#
    发表于 2016-8-22 16:39:30 | 只看该作者
    有iframe的,切换下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    11#
     楼主| 发表于 2016-8-22 17:10:38 | 只看该作者
    掉渣饼 发表于 2016-8-22 16:02
    换成Xpath或者name定位试试,或者前面加上元素的父节点,但是不加事件
    比如
    driver.findElement(By.id("s ...

    我尝试了一下,发现父节点也无法定位,再往上iframe里面的都不行,iframe上面的<div class="conent_frame">就可以定位了,难道driver.switchTo().frame("mainFrame");这句没跳转成功?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    12#
     楼主| 发表于 2016-8-22 17:11:16 | 只看该作者
    若尘_51 发表于 2016-8-22 15:53
    是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试

    xpath和CSS都试过的,不行
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    13#
     楼主| 发表于 2016-8-22 17:28:27 | 只看该作者
    joykao 发表于 2016-8-22 16:39
    有iframe的,切换下

    切换了啊,但是感觉没成功的样子,里面的元素都定位不到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    14#
    发表于 2016-8-22 17:28:28 | 只看该作者
    sunliz 发表于 2016-8-22 17:11
    xpath和CSS都试过的,不行

                     //跳转的新建创意组页面
                     driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
                     driver.switchTo().frame("mainFrame");
                    driver.findElement(By.id("newGroup")).click();//*[@id="newGroup"]
                    driver.findElement(By.name("stype")).click();

    那就有可能是定位的焦点并不在这个新建创意组页面上,先切换下页面,再切换frame
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 1182 天

    连续签到: 1 天

    [LV.10]测试总司令

    15#
    发表于 2016-8-22 17:50:33 | 只看该作者
    什么时候把HTML的代码图加上了
    那会看的时候都没有。
    明显的有iframe,需要switchTo切换的。直接切换不行的,可以先切换到default frame ,然后再切换到你需要的frame尝试。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 1182 天

    连续签到: 1 天

    [LV.10]测试总司令

    16#
    发表于 2016-8-22 17:58:37 | 只看该作者
    把你的<head>标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-12-24 13:41
  • 签到天数: 314 天

    连续签到: 1 天

    [LV.8]测试军长

    17#
    发表于 2016-8-22 21:10:59 | 只看该作者
    sunliz 发表于 2016-8-22 17:10
    我尝试了一下,发现父节点也无法定位,再往上iframe里面的都不行,iframe上面的就可以定位了,难道driver ...

    感觉你是不是在浏览器点击菜单按钮后,重新打开了一个窗口,等于现在浏览器中有两个窗口,如果是这样你可以去网上了解下获取当前窗口句柄与切换的用法,我知道用Python+selenium怎么写,但是用java+selenium不太熟悉,你可以百度下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    18#
     楼主| 发表于 2016-8-23 10:38:14 | 只看该作者
    掉渣饼 发表于 2016-8-22 21:10
    感觉你是不是在浏览器点击菜单按钮后,重新打开了一个窗口,等于现在浏览器中有两个窗口,如果是这样你可 ...

    窗口句柄我试过,获取到的是同一个句柄,所以应该不是,我再试试他们上面说的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-9-23 15:22
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    19#
     楼主| 发表于 2016-8-23 10:40:40 | 只看该作者
    清晨一缕阳光 发表于 2016-8-22 17:58
    把你的标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?

    <head>里面是一些link 和script
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2017-11-7 16:44
  • 签到天数: 290 天

    连续签到: 1 天

    [LV.8]测试军长

    20#
    发表于 2016-8-23 10:47:31 | 只看该作者
    排查下:
    (1)跳转的新建创意组页面之后,打印下当前的ULR,确认是否进入该页面。
    (2)如果确认了进入该页面,你试试脚本直接从这个页面开始,然后执行下面的动作。(另外查看一下元素,是不是还有其他ifame)
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 09:37 , Processed in 0.081046 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表