51Testing软件测试论坛

标题: selenium定位报错 [打印本页]

作者: sunliz    时间: 2016-8-22 11:45
标题: selenium定位报错
本帖最后由 sunliz 于 2016-8-22 14:24 编辑

点击菜单按钮后跳转到新的页面,想定位点击新页面的按钮[attach]102280[/attach]
使用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不太懂怎么回事,也搜不到,求教该怎么办啊



作者: 清晨一缕阳光    时间: 2016-8-22 12:11
在定位元素之前增加等待时间,等待页面加载完成;
作者: sunliz    时间: 2016-8-22 14:11
清晨一缕阳光 发表于 2016-8-22 12:11
在定位元素之前增加等待时间,等待页面加载完成;

设置了,也没有用
作者: sunliz    时间: 2016-8-22 14:12
清晨一缕阳光 发表于 2016-8-22 12:11
在定位元素之前增加等待时间,等待页面加载完成;

设置了,也没有用
作者: sunliz    时间: 2016-8-22 14:12
清晨一缕阳光 发表于 2016-8-22 12:11
在定位元素之前增加等待时间,等待页面加载完成;

设置了,也没有用
作者: 若尘_51    时间: 2016-8-22 15:09
那个切换frame(录制脚本是录不出来这个的)是必须有的,把你完整的脚本贴出来给大伙看看。
作者: sunliz    时间: 2016-8-22 15:15
若尘_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();
  }

}

作者: 若尘_51    时间: 2016-8-22 15:53
sunliz 发表于 2016-8-22 15:15
public class FirstLogin {
         public WebDriver driver;
         WebElement  drop_down;

是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试
作者: 掉渣饼    时间: 2016-8-22 16:02
换成Xpath或者name定位试试,或者前面加上元素的父节点,但是不加事件
比如
driver.findElement(By.id("searchForm"))
driver.findElement(By.id("newGroup")).click()
作者: joykao    时间: 2016-8-22 16:39
有iframe的,切换下
作者: sunliz    时间: 2016-8-22 17:10
掉渣饼 发表于 2016-8-22 16:02
换成Xpath或者name定位试试,或者前面加上元素的父节点,但是不加事件
比如
driver.findElement(By.id("s ...

我尝试了一下,发现父节点也无法定位,再往上iframe里面的都不行,iframe上面的<div class="conent_frame">就可以定位了,难道driver.switchTo().frame("mainFrame");这句没跳转成功?
作者: sunliz    时间: 2016-8-22 17:11
若尘_51 发表于 2016-8-22 15:53
是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试

xpath和CSS都试过的,不行
作者: sunliz    时间: 2016-8-22 17:28
joykao 发表于 2016-8-22 16:39
有iframe的,切换下

切换了啊,但是感觉没成功的样子,里面的元素都定位不到
作者: 若尘_51    时间: 2016-8-22 17: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
作者: 清晨一缕阳光    时间: 2016-8-22 17:50
什么时候把HTML的代码图加上了
那会看的时候都没有。
明显的有iframe,需要switchTo切换的。直接切换不行的,可以先切换到default frame ,然后再切换到你需要的frame尝试。
作者: 清晨一缕阳光    时间: 2016-8-22 17:58
把你的<head>标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?
作者: 掉渣饼    时间: 2016-8-22 21:10
sunliz 发表于 2016-8-22 17:10
我尝试了一下,发现父节点也无法定位,再往上iframe里面的都不行,iframe上面的就可以定位了,难道driver ...

感觉你是不是在浏览器点击菜单按钮后,重新打开了一个窗口,等于现在浏览器中有两个窗口,如果是这样你可以去网上了解下获取当前窗口句柄与切换的用法,我知道用Python+selenium怎么写,但是用java+selenium不太熟悉,你可以百度下
作者: sunliz    时间: 2016-8-23 10:38
掉渣饼 发表于 2016-8-22 21:10
感觉你是不是在浏览器点击菜单按钮后,重新打开了一个窗口,等于现在浏览器中有两个窗口,如果是这样你可 ...

窗口句柄我试过,获取到的是同一个句柄,所以应该不是,我再试试他们上面说的
作者: sunliz    时间: 2016-8-23 10:40
清晨一缕阳光 发表于 2016-8-22 17:58
把你的标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?

<head>里面是一些link 和script
作者: 若尘_51    时间: 2016-8-23 10:47
排查下:
(1)跳转的新建创意组页面之后,打印下当前的ULR,确认是否进入该页面。
(2)如果确认了进入该页面,你试试脚本直接从这个页面开始,然后执行下面的动作。(另外查看一下元素,是不是还有其他ifame)




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