51Testing软件测试论坛

标题: selenium新手求助,关于一个元素的定位【已解决】 [打印本页]

作者: lee19870219    时间: 2013-12-9 18:38
标题: selenium新手求助,关于一个元素的定位【已解决】
本帖最后由 lee19870219 于 2013-12-12 15:28 编辑

如图所示元素,我无法定位到[attach]88316[/attach]
我想定位到那个元素然后点击,但是每次都是无法找到,用了className,xpath,cssSelector等都试用了,都定位不到该元素
作者: joykao    时间: 2013-12-10 11:00
不知道你用cssSelector怎么定位的。。。是这样么?

getElement(By.cssSelector("div[class='panel-title panel-with-icon']"))报出来说这个元素can't be located?
作者: lee19870219    时间: 2013-12-10 11:25
回复 2# joykao

你好,我使用你提供的定位到了上面的一个元素
System.out.println(driver.findElement(By.cssSelector("div[class='panel-title panel-with-icon']")).getText());
我把他打出来显示的是   SMP系统管理平台,这两个的class都是panel-title panel-with-icon
如图[attach]88325[/attach],我想定位下面这个 微信平台,不知道要怎么做。
我之前使用的cssSelector是用的firebug的css路径。我是新手不太懂,只是看了一些资料,想试试,结果怎么都试不出来。
作者: joykao    时间: 2013-12-10 12:32
回复 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)
作者: lee19870219    时间: 2013-12-10 14:04
本帖最后由 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,可以正常操作
作者: joykao    时间: 2013-12-10 15:16
回复 5# lee19870219


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

   是说那个元素是不可见的?,,,是公网吗?Let me try?
作者: lee19870219    时间: 2013-12-10 15:30
本帖最后由 lee19870219 于 2013-12-10 15:33 编辑

回复 6# joykao


    还是谢谢你了,没有你的帮助,我现在连那个元素都还不能定位呢。
是内网。。运行时报出这个异常[attach]88340[/attach]。
我也奇怪,定位到两个元素,第一个“SMP系统管理平台”可以click操作,但是就是这个“微信平台”不能,加上click就报异常
这个图是整个左边的Html[attach]88341[/attach]
作者: ripple_wang    时间: 2013-12-10 16:39
试试这样可不可以            
        IList<IWebElement> divelements = browser.FindElements(By.ClassName("panel-title panel-with-icon"));
                    foreach (IWebElement divelement in divelements)
                    {
                        if (divelement.GetAttribute("innerText").Contains("微信平台"))
                        {
                            divelement.click();
                        }
                    }
作者: lee19870219    时间: 2013-12-10 17:20
本帖最后由 lee19870219 于 2013-12-10 17:28 编辑

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

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

虽然是成功点击了,但是还是没有彻底解决这类问题。不能每次总这样先点击“SMP”,在点击“微信平台”。我还是依旧想实现登陆后就点击“微信平台”,然后成功打开的。
作者: joykao    时间: 2013-12-10 17:25
回复 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();
            }
        }
作者: joykao    时间: 2013-12-10 17:25
回复 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();
            }
        }
作者: lee19870219    时间: 2013-12-10 17:33
回复 11# joykao


    遍历是可以的,前提就是我说的那个,要先点击一次"SMP系统管理平台",然后在点击才能成功,原因不知道
作者: 六月天    时间: 2013-12-10 17:44
你先了解登录前后有没有区别。这不是元素找不到,而是元素不可见,你要搞清楚这块区域的javascript脚本,有没有登录前后的异步刷新或者是因为某个事件触发的刷新。
搞自动化,不是光从表面认识工具,而是要从原理级别去理解。
作者: lee19870219    时间: 2013-12-10 18:05
回复 13# 六月天

很抱歉。
    我基本不懂开发,懂得一点JAVA的知识。JS一点也不知道,我只是一个刚工作不久的功能测试人员而已,公司自动化用的是selenium,我只是在空余的时间里面想自己学习一下怎么用,我个人觉得问题在实践中发现并解决是最快的学习方法。对于这个问题我在网上找了很多资料,搜了很多,没有找到能帮助我解决他的东西,我才会在这里问。关于你说的搞清楚这块区域的javascript脚本,该从那里去学习JS?从基础的JS开始?我想自己学习一下自动化而已。
作者: 六月天    时间: 2013-12-12 13:26
想成为web自动化测试的高手,selenium的高手,那么javascript这块知识是必不可少的,说的直接点,javascript的水平起码不能比开发差,这样你对前端页面问题会有全新的认识,到时候你会发现selenium简直太简单了,没有任何selenium的问题可以难倒你。
其实不光selenium,由于web自动化测试完全基于前端,而目前前端最流行的技术也就是javascript的一些新架构和html5技术,学会这些东西绝对让你的web自动化测试能力拔高一大块。
有机会的话,再学一下css,不过不是太重要了,因为仅仅是个排版布局的技术,对自动化测试影响不大,能让你更好认识前端页面而已,前端也就是这些了。
作者: joykao    时间: 2013-12-12 14:41
回复 15# 六月天

问下楼主,有Android driver方面的知识么?可以分享下么?
作者: lee19870219    时间: 2013-12-12 15:27
本帖最后由 lee19870219 于 2013-12-12 16:11 编辑

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

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




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