chuodl 发表于 2013-11-26 22:58:31

Selenium中xpath的问题

本人新手 学习selenium中关于xpath有些不明白
ByXpath.xpath()和By.xpath()的区别是什么
ByXpath.xpath() 我个人理解是里面是表达式
By.xpath() 我个人认为是绝对路径

然后我使用中遇见一些问题
xpath是 /x:html/x:body/x:div/x:div/x:dl/x:dt/x:a
我用这个方法可以定位到元素driver.findElement(By.xpath("/html/body/div/div/dl/dt/a"))
xpath 是id('formTab')/x:li/x:a 我用下面的方法也可以找到元素
driver.findElement(ByXPath.xpath("//*[@id='formTab']/li/a"))
但是当xpath是id('tousu_form2')/x:table/x:tbody/x:tr/x:td/x:label/x:input 时我用类似的方法缺找不到了 不知道为什么 我觉得和上面都一样呀
driver.findElement(ByXPath.xpath("//*[@id='tousu_form2']/table/tbody/tr/td/lable/input")); 定位不到了图片是我想定位提交问题的radio

哈问题有点长 希望大家耐心看完 多帮助一下 先谢谢了呀

chuodl 发表于 2013-11-27 09:14:43

额图片为什么没显示呀 回家我在重添加以下吧

joykao 发表于 2013-11-27 10:30:48

By.xpath() 我个人认为是绝对路径这句话不对。。。一般直接就用By.xpath()。。。。ByXpath.xpath()没用过,也没啥意思。。。用xpath最好不要用绝对路径,还是用相对路径的好

chuodl 发表于 2013-11-27 11:09:51

回复 3# joykao
哦 那请问一下 我的xpath 是
id('tousu_form2')/x:table/x:tbody/x:tr/x:td/x:label/x:input这是用火狐xpath取的

我用
driver.findElement(ByXPath.xpath("//*[@id='tousu_form2']/table/tbody/tr/td/lable/input")); 为什么定位不到呢 是有什么问题吗 ,或者要是能帮我写一个就更好了哈 ,不知道为什么图片传不上来 等回家我在传吧

joykao 发表于 2013-11-27 14:46:22

回复 4# chuodl


用firefox 下的xpath抓取的值经常会出问题,个人比较喜欢用chrome下的PsychoXpath 选择Element(short)来抓取xpath。。。但是说实话能不用xpath就不用。。。方便上一下元素的html代码截图么?看可不可以用其他方法代替xpath

chuodl 发表于 2013-11-27 20:23:44

回复 5# joykao

chuodl 发表于 2013-11-27 20:25:01

回复 5# joykao


    回复图片了 好像要等管理员审核 看看吧 要是看不见 我再重传一个

joykao 发表于 2013-11-28 10:24:38

回复 6# chuodl


    可以看到了。。这个元素不要用xpath找。。。用cssSelector吧

By.cssSelector(input)。。。这个更靠谱。。。当然你也可以用name去找。。。不过name名字是type。。估计不是唯一属性。。。

六月天 发表于 2013-11-28 18:09:04

最近怎么这么多xpath问题。。。。。这个东西很简单。
图上的这个元素我看了一下,用By.xpath("//input[@value='提交问题']")不就行了?我刚才试了一下,完全没问题啊。

chuodl 发表于 2013-11-28 21:36:04

谢谢 二位 哈 问题解决了 尤其@joykao 上次我的问题也是你帮着解答的 十分感谢

Cris@Kaka 发表于 2013-12-5 15:58:13

本帖最后由 Cris@Kaka 于 2013-12-5 16:38 编辑

点击这个新建,又要怎么写呢?我试过   
   driver.findElement(By.xpath("//td[@id='ToolBarContainer']/div/a")).click();
    //driver.findElement(By.xpath("/html/body/table/tbody/tr/td/div/a")).click();
    //driver.findElement(By.linkText("新建")).click();
    //driver.findElement(By.xpath("//a[@title='新建']")).click();
   这四个都不行。。但是IDE上都可以。

回复 8# joykao

Cris@Kaka 发表于 2013-12-6 09:34:39

回复 9# 六月天


    请看楼上我的,我想一定是我们公司项目Firefox支持得不好的原因。。T_T

joykao 发表于 2013-12-6 13:06:02

回复 11# Cris@Kaka


这么写

driver.findElement(By.cssSelector("a")).click();

Cris@Kaka 发表于 2013-12-12 14:37:04

回复 13# joykao


    我想说这样也是不行的。。:dizzy:

joykao 发表于 2013-12-12 15:12:01

回复 14# Cris@Kaka


不是。可以确认一下你的步骤么?
1.点击了LJC
2.点击我的工作日程
然后右边自动跳到我的工作日程?貌似右边有起始页和我的工作日程2个tab嘛。。。是不是默认的是起始页么?那个右边我的工作日程可以点击么?你这个应该用的是frame吧?多个frame之间切换是需要switchto的。。就和不用的页面切换类似。。。你仔细看下到底在那个frame下。。然后先switchto那个frame再去点击那个新建按钮。。。

Cris@Kaka 发表于 2013-12-13 13:51:59

回复 15# joykao


    点击LJC之前我就有switchto左边的frame,然后完了之后我又switchto中间的frame了。。还是不行。。至于两个tab。很有可能真的定位到起始页去了。。那要怎么切换到我的工作日程这个tab啊

joykao 发表于 2013-12-13 14:36:01

回复 16# Cris@Kaka

。。。。其实我觉得吧。。多frame也不一定会有问题,问几个很愚蠢的问题哈:

1.当你进入到截图页面时,该页面的默认状态是怎样的?左边所有的树形结构都是关闭没展开的?还是有默认展开的部分?
2.当你点击LJC时URL在变化么?这时候右边是默认显示起始页的?
3.当你点击我的工作日程时URL 又有变化么?这时默认显示的我的工作日程?
4.上述步骤中页面的title有没有变化?

Cris@Kaka 发表于 2013-12-13 16:19:24

回复 17# joykao


    首先这几个问题不愚蠢呀,应该都很关键吧嘿嘿
1.进入页面树形结构都是关闭的,需要点击去打开
2.URL一直没有变化, 系统登录进去就有显示起始页了,然后点击到我的日程管理业务才会跳到相应的新增加tab页面
3. URL 没变    这是就是显示我的工作日程了
4.页面的title一直没变

foxmessire 发表于 2013-12-17 14:20:24

回复 18# Cris@Kaka


我这边也出现这种问题,不知道要怎么定位按钮。

Cris@Kaka 发表于 2013-12-18 09:28:39

回复 19# foxmessire


    解决了相互通知声。。
页: [1] 2
查看完整版本: Selenium中xpath的问题