selenium新手求助,关于一个元素的定位【已解决】
本帖最后由 lee19870219 于 2013-12-12 15:28 编辑如图所示元素,我无法定位到
我想定位到那个元素然后点击,但是每次都是无法找到,用了className,xpath,cssSelector等都试用了,都定位不到该元素 不知道你用cssSelector怎么定位的。。。是这样么?
getElement(By.cssSelector("div"))报出来说这个元素can't be located? 回复 2# joykao
你好,我使用你提供的定位到了上面的一个元素
System.out.println(driver.findElement(By.cssSelector("div")).getText());
我把他打出来显示的是 SMP系统管理平台,这两个的class都是panel-title panel-with-icon
如图,我想定位下面这个 微信平台,不知道要怎么做。
我之前使用的cssSelector是用的firebug的css路径。我是新手不太懂,只是看了一些资料,想试试,结果怎么都试不出来。 回复 3# lee19870219
你这个页面元素的html属性很有意思啊。。。除了title不一样其他的都一样。。。所以定位到了第一个上面去了。。。试试getElement(By.cssSelector("div")),这个不确定,如果想验证自己的css值是否正确,可以借助firefox下的firefind。。。看是否可以highlight到元素。。。如果要用xpath定位。。xpath值嘛。。。不要用firefox下的xpath去取。。用chrome下的PsychoXpath:https://chrome.google.com/webstore/detail/psychoxpath/bpnigkcdmnofjkmojlopmelmhgpbndog 找一个short的相对路径。。。element(short) 本帖最后由 lee19870219 于 2013-12-10 14:47 编辑
回复 4# joykao
你好,我按照你说的方式刚刚试了下,使用chrome下的PsychoXpath找到了“微信平台”元素(唯一),但是如果对该元素进行click操作就报错。
但是我刚刚又试了下List<WebElement> links = driver.findElements(By.cssSelector("div"));这个方式来获取,找到了那两个元素,我对第一个元素“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,可以正常操作 回复 5# lee19870219
都可以识别到那个元素了竟然不可以点击?。。。:@
是说那个元素是不可见的?,,,是公网吗?Let me try? 本帖最后由 lee19870219 于 2013-12-10 15:33 编辑
回复 6# joykao
还是谢谢你了,没有你的帮助,我现在连那个元素都还不能定位呢。
是内网。。运行时报出这个异常。
我也奇怪,定位到两个元素,第一个“SMP系统管理平台”可以click操作,但是就是这个“微信平台”不能,加上click就报异常
这个图是整个左边的Html 试试这样可不可以
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:28 编辑
回复 6# joykao
回复 8# ripple_wang
我貌似找到问题了,我发现,这个系统在登录之后进入那个页面。
起始状态是这样的“SMP”那个是打开的,显示下级菜单的。对应的HTML部分为
click之后是这个状态。对应HTML部分为,这部分发生了变化。
然后我在代码里再次复制了点击“SMP”的语句,但是第二次就失败,报该元素无法定位的错误。原因可能是因为html部分发生变化了。我将变化后的xpath付给第二次打开的语句,然后点击成功。
第二个元素“微信平台”在点击前后的html也发生了类似的变化。但是登陆之后直接点击会报“该元素不可见”的错误(但是该元素可以被定位)。然后我进行了下面操作,就成功点击了,原因不明。
1.登陆后先找"SMP"元素并点击。也就是让页面变成这种状态
2.然后在点击“微信平台”,没有报错,点击成功。
虽然是成功点击了,但是还是没有彻底解决这类问题。不能每次总这样先点击“SMP”,在点击“微信平台”。我还是依旧想实现登陆后就点击“微信平台”,然后成功打开的。 回复 7# lee19870219
或者试试遍历吧
List<WebElement> divelements =driver.findElements(By.cssSelector("div"));
for(WebElement div : divelements ){
if (div.getText().contains("微信平台")){
System.out.println("hahahahahahahha");
div.click();
}
} 回复 7# lee19870219
或者试试遍历吧
List<WebElement> divelements =driver.findElements(By.cssSelector("div"));
for(WebElement div : divelements ){
if (div.getText().contains("微信平台")){
System.out.println("hahahahahahahha");
div.click();
}
} 回复 11# joykao
遍历是可以的,前提就是我说的那个,要先点击一次"SMP系统管理平台",然后在点击才能成功,原因不知道 你先了解登录前后有没有区别。这不是元素找不到,而是元素不可见,你要搞清楚这块区域的javascript脚本,有没有登录前后的异步刷新或者是因为某个事件触发的刷新。
搞自动化,不是光从表面认识工具,而是要从原理级别去理解。 回复 13# 六月天
很抱歉。
我基本不懂开发,懂得一点JAVA的知识。JS一点也不知道,我只是一个刚工作不久的功能测试人员而已,公司自动化用的是selenium,我只是在空余的时间里面想自己学习一下怎么用,我个人觉得问题在实践中发现并解决是最快的学习方法。对于这个问题我在网上找了很多资料,搜了很多,没有找到能帮助我解决他的东西,我才会在这里问。关于你说的搞清楚这块区域的javascript脚本,该从那里去学习JS?从基础的JS开始?我想自己学习一下自动化而已。 想成为web自动化测试的高手,selenium的高手,那么javascript这块知识是必不可少的,说的直接点,javascript的水平起码不能比开发差,这样你对前端页面问题会有全新的认识,到时候你会发现selenium简直太简单了,没有任何selenium的问题可以难倒你。
其实不光selenium,由于web自动化测试完全基于前端,而目前前端最流行的技术也就是javascript的一些新架构和html5技术,学会这些东西绝对让你的web自动化测试能力拔高一大块。
有机会的话,再学一下css,不过不是太重要了,因为仅仅是个排版布局的技术,对自动化测试影响不大,能让你更好认识前端页面而已,前端也就是这些了。 回复 15# 六月天
:o问下楼主,有Android driver方面的知识么?可以分享下么? 本帖最后由 lee19870219 于 2013-12-12 16:11 编辑
回复 15# 六月天
回复 16# joykao
你好,谢谢你的指点,看到你的指点我有了些许的方向。对于JS这方面的学习,还有一些疑问,按照你说的向我这种以前从来没有接触过JS的人,是从头开始全面的学起还是有重点的学起,对于这方面真的不太懂,学习对我来说是个漫长的过程,我不想一下吃个胖子,就像慢慢利用工作空余时间一点一点的积累,学习。不奢望成为自动化方面的高手,只能能解决日常工作中的问题,实现一些高重复性的回归测试就行。
今天在练习中遇到了一个问题,我在网上找的资料,然后使用driver.switchTo().frame(frame);定位到了frame中的元素,然后对其进行点击操作。运行脚本到点击那一步后就出现了如下错误。
于是我看着HTML点击了该元素,发现点击后该frame中的<body>发生了变化。出现了拒绝访问,我也不知道怎么解决,上网都不知道怎么去搜。
页:
[1]