sunliz 发表于 2016-8-22 11:45:28

selenium定位报错

本帖最后由 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 ]
    driver.findElement(By.id("newGroup")).click();
    driver.findElement(By.name("stype")).click();
}

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

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


清晨一缕阳光 发表于 2016-8-22 12:11:15

在定位元素之前增加等待时间,等待页面加载完成;

sunliz 发表于 2016-8-22 14:11:44

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

设置了,也没有用

sunliz 发表于 2016-8-22 14:12:05

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

设置了,也没有用

sunliz 发表于 2016-8-22 14:12:08

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

设置了,也没有用

若尘_51 发表于 2016-8-22 15:09:41

那个切换frame(录制脚本是录不出来这个的)是必须有的,把你完整的脚本贴出来给大伙看看。

sunliz 发表于 2016-8-22 15:15:06

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

public class FirstLogin {
       public WebDriver driver;
       WebElementdrop_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")).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:07

sunliz 发表于 2016-8-22 15:15
public class FirstLogin {
       public WebDriver driver;
       WebElementdrop_down;


是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试

掉渣饼 发表于 2016-8-22 16:02:27

换成Xpath或者name定位试试,或者前面加上元素的父节点,但是不加事件
比如
driver.findElement(By.id("searchForm"))
driver.findElement(By.id("newGroup")).click()

joykao 发表于 2016-8-22 16:39:30

有iframe的,切换下

sunliz 发表于 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");这句没跳转成功?

sunliz 发表于 2016-8-22 17:11:16

若尘_51 发表于 2016-8-22 15:53
是不是这下面不止一个id叫newGroup的元素啊。   你换Xpath的方式试试

xpath和CSS都试过的,不行:'(

sunliz 发表于 2016-8-22 17:28:27

joykao 发表于 2016-8-22 16:39
有iframe的,切换下

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

若尘_51 发表于 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

清晨一缕阳光 发表于 2016-8-22 17:50:33

什么时候把HTML的代码图加上了:o
那会看的时候都没有。
明显的有iframe,需要switchTo切换的。直接切换不行的,可以先切换到default frame ,然后再切换到你需要的frame尝试。

清晨一缕阳光 发表于 2016-8-22 17:58:37

把你的<head>标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?

掉渣饼 发表于 2016-8-22 21:10:59

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

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

sunliz 发表于 2016-8-23 10:38:14

掉渣饼 发表于 2016-8-22 21:10
感觉你是不是在浏览器点击菜单按钮后,重新打开了一个窗口,等于现在浏览器中有两个窗口,如果是这样你可 ...

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

sunliz 发表于 2016-8-23 10:40:40

清晨一缕阳光 发表于 2016-8-22 17:58
把你的标签点开看看,看里面都写的是什么。会不会在这个标签里面还有其他的frame?

<head>里面是一些link 和script

若尘_51 发表于 2016-8-23 10:47:31

排查下:
(1)跳转的新建创意组页面之后,打印下当前的ULR,确认是否进入该页面。
(2)如果确认了进入该页面,你试试脚本直接从这个页面开始,然后执行下面的动作。(另外查看一下元素,是不是还有其他ifame)
页: [1]
查看完整版本: selenium定位报错