51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 11550|回复: 16
打印 上一主题 下一主题

selenium新手求助,关于一个元素的定位【已解决】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-12-9 18:38:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lee19870219 于 2013-12-12 15:28 编辑

如图所示元素,我无法定位到
我想定位到那个元素然后点击,但是每次都是无法找到,用了className,xpath,cssSelector等都试用了,都定位不到该元素

本帖子中包含更多资源

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

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

使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    2#
    发表于 2013-12-10 11:00:04 | 只看该作者
    不知道你用cssSelector怎么定位的。。。是这样么?

    getElement(By.cssSelector("div[class='panel-title panel-with-icon']"))报出来说这个元素can't be located?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
     楼主| 发表于 2013-12-10 11:25:57 | 只看该作者
    回复 2# joykao

    你好,我使用你提供的定位到了上面的一个元素
    System.out.println(driver.findElement(By.cssSelector("div[class='panel-title panel-with-icon']")).getText());
    我把他打出来显示的是   SMP系统管理平台,这两个的class都是panel-title panel-with-icon
    如图,我想定位下面这个 微信平台,不知道要怎么做。
    我之前使用的cssSelector是用的firebug的css路径。我是新手不太懂,只是看了一些资料,想试试,结果怎么都试不出来。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    4#
    发表于 2013-12-10 12:32:30 | 只看该作者
    回复 3# lee19870219

    你这个页面元素的html属性很有意思啊。。。除了title不一样其他的都一样。。。所以定位到了第一个上面去了。。。试试getElement(By.cssSelector("div[class='panel-title panel-with-icon'][1]")),这个不确定,如果想验证自己的css值是否正确,可以借助firefox下的firefind。。。看是否可以highlight到元素。。。如果要用xpath定位。。xpath值嘛。。。不要用firefox下的xpath去取。。用chrome下的PsychoXpath:https://chrome.google.com/websto ... kmojlopmelmhgpbndog 找一个short的相对路径。。。element(short)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
     楼主| 发表于 2013-12-10 14:04:35 | 只看该作者
    本帖最后由 lee19870219 于 2013-12-10 14:47 编辑

    回复 4# joykao


    你好,我按照你说的方式刚刚试了下,使用chrome下的PsychoXpath找到了“微信平台”元素(唯一),但是如果对该元素进行click操作就报错。
    但是我刚刚又试了下List<WebElement> links = driver.findElements(By.cssSelector("div[class='panel-title panel-with-icon']"));这个方式来获取,找到了那两个元素,我对第一个元素“SMP系统管理平台”进行click成功,但是对第二个“微信平台”就失败。我不知道是为什么了。
    我刚刚又试了一次报的元素不可见异常。org.openqa.selenium.ElementNotVisibleException: The point at which the driver is attempting to click on the element was not scrolled into the viewport. (WARNING: The server did not provide any stacktrace information)
    要怎么解决的,为是么点击第一个元素却正常点击呢
    我也试了一下IDE,可以正常操作
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    6#
    发表于 2013-12-10 15:16:01 | 只看该作者
    回复 5# lee19870219


    都可以识别到那个元素了竟然不可以点击?。。。

       是说那个元素是不可见的?,,,是公网吗?Let me try?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
     楼主| 发表于 2013-12-10 15:30:30 | 只看该作者
    本帖最后由 lee19870219 于 2013-12-10 15:33 编辑

    回复 6# joykao


        还是谢谢你了,没有你的帮助,我现在连那个元素都还不能定位呢。
    是内网。。运行时报出这个异常。
    我也奇怪,定位到两个元素,第一个“SMP系统管理平台”可以click操作,但是就是这个“微信平台”不能,加上click就报异常
    这个图是整个左边的Html

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2013-12-10 16:39:26 | 只看该作者
    试试这样可不可以            
            IList<IWebElement> divelements = browser.FindElements(By.ClassName("panel-title panel-with-icon"));
                        foreach (IWebElement divelement in divelements)
                        {
                            if (divelement.GetAttribute("innerText").Contains("微信平台"))
                            {
                                divelement.click();
                            }
                        }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
     楼主| 发表于 2013-12-10 17:20:47 | 只看该作者
    本帖最后由 lee19870219 于 2013-12-10 17:28 编辑

    回复 6# joykao
    回复 8# ripple_wang
    我貌似找到问题了,我发现,这个系统在登录之后进入那个页面。
    起始状态是这样的“SMP”那个是打开的,显示下级菜单的。对应的HTML部分为
    click之后是这个状态。对应HTML部分为,这部分发生了变化。
    然后我在代码里再次复制了点击“SMP”的语句,但是第二次就失败,报该元素无法定位的错误。原因可能是因为html部分发生变化了。我将变化后的xpath付给第二次打开的语句,然后点击成功。

    第二个元素“微信平台”在点击前后的html也发生了类似的变化。但是登陆之后直接点击会报“该元素不可见”的错误(但是该元素可以被定位)。然后我进行了下面操作,就成功点击了,原因不明。
    1.登陆后先找"SMP"元素并点击。也就是让页面变成这种状态
    2.然后在点击“微信平台”,没有报错,点击成功。

    虽然是成功点击了,但是还是没有彻底解决这类问题。不能每次总这样先点击“SMP”,在点击“微信平台”。我还是依旧想实现登陆后就点击“微信平台”,然后成功打开的。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    10#
    发表于 2013-12-10 17:25:03 | 只看该作者
    回复 7# lee19870219
    或者试试遍历吧

                 List<WebElement> divelements =driver.findElements(By.cssSelector("div[class='panel-title panel-with-icon']"));
                     for(WebElement div : divelements ){
                if (div.getText().contains("微信平台")){
                        System.out.println("hahahahahahahha");
                        div.click();
                }
            }
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    11#
    发表于 2013-12-10 17:25:04 | 只看该作者
    回复 7# lee19870219
    或者试试遍历吧

                 List<WebElement> divelements =driver.findElements(By.cssSelector("div[class='panel-title panel-with-icon']"));
                     for(WebElement div : divelements ){
                if (div.getText().contains("微信平台")){
                        System.out.println("hahahahahahahha");
                        div.click();
                }
            }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
     楼主| 发表于 2013-12-10 17:33:19 | 只看该作者
    回复 11# joykao


        遍历是可以的,前提就是我说的那个,要先点击一次"SMP系统管理平台",然后在点击才能成功,原因不知道
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2013-12-10 17:44:54 | 只看该作者
    你先了解登录前后有没有区别。这不是元素找不到,而是元素不可见,你要搞清楚这块区域的javascript脚本,有没有登录前后的异步刷新或者是因为某个事件触发的刷新。
    搞自动化,不是光从表面认识工具,而是要从原理级别去理解。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
     楼主| 发表于 2013-12-10 18:05:50 | 只看该作者
    回复 13# 六月天

    很抱歉。
        我基本不懂开发,懂得一点JAVA的知识。JS一点也不知道,我只是一个刚工作不久的功能测试人员而已,公司自动化用的是selenium,我只是在空余的时间里面想自己学习一下怎么用,我个人觉得问题在实践中发现并解决是最快的学习方法。对于这个问题我在网上找了很多资料,搜了很多,没有找到能帮助我解决他的东西,我才会在这里问。关于你说的搞清楚这块区域的javascript脚本,该从那里去学习JS?从基础的JS开始?我想自己学习一下自动化而已。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2013-12-12 13:26:32 | 只看该作者
    想成为web自动化测试的高手,selenium的高手,那么javascript这块知识是必不可少的,说的直接点,javascript的水平起码不能比开发差,这样你对前端页面问题会有全新的认识,到时候你会发现selenium简直太简单了,没有任何selenium的问题可以难倒你。
    其实不光selenium,由于web自动化测试完全基于前端,而目前前端最流行的技术也就是javascript的一些新架构和html5技术,学会这些东西绝对让你的web自动化测试能力拔高一大块。
    有机会的话,再学一下css,不过不是太重要了,因为仅仅是个排版布局的技术,对自动化测试影响不大,能让你更好认识前端页面而已,前端也就是这些了。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]测试副司令

    16#
    发表于 2013-12-12 14:41:47 | 只看该作者
    回复 15# 六月天

    问下楼主,有Android driver方面的知识么?可以分享下么?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
     楼主| 发表于 2013-12-12 15:27:59 | 只看该作者
    本帖最后由 lee19870219 于 2013-12-12 16:11 编辑

    回复 15# 六月天
    回复 16# joykao

    你好,谢谢你的指点,看到你的指点我有了些许的方向。对于JS这方面的学习,还有一些疑问,按照你说的向我这种以前从来没有接触过JS的人,是从头开始全面的学起还是有重点的学起,对于这方面真的不太懂,学习对我来说是个漫长的过程,我不想一下吃个胖子,就像慢慢利用工作空余时间一点一点的积累,学习。不奢望成为自动化方面的高手,只能能解决日常工作中的问题,实现一些高重复性的回归测试就行。
    今天在练习中遇到了一个问题,我在网上找的资料,然后使用driver.switchTo().frame(frame);定位到了frame中的元素,然后对其进行点击操作。运行脚本到点击那一步后就出现了如下错误。
    于是我看着HTML点击了该元素,发现点击后该frame中的<body>发生了变化。出现了拒绝访问,我也不知道怎么解决,上网都不知道怎么去搜。

    本帖子中包含更多资源

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

    x
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-22 04:15 , Processed in 0.078894 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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