2015年5月20日 星期三

[Selenium] Xpath

在selenium選取元件有很多種方式,其中一種是Xpath
今天我的網頁架構如下,我想要得到aaabbbccc這個值, 但這個table又沒有可以取得的class或id,於是就可以使用Xpath
  
item1 12345678910
item2 aaabbbccc

  webdriver.By.xpath("//tr[contains(.,'item2')]//td[2]")

用口語一點的說法是"在含有item2這個字的tr(tr[contains(.,'item2')])的下一層(//)裡的第二個td(td[2])

當時我有6成信心這樣寫應該是對的
但就是一直出錯,而且我還不知道要怎麼印出這個值
後來把他sendkey到一個input上才看到原因出在哪裡,
當時印出來變成item1 12345678910 ...
可能礙於那個input有字數限制,不然應該會把整個table裡的所有值都印出來
後來才發現原來這個table外面還有一個table:
也就是說tr[contains(.,'item2')]的這個寫法會被視為你要長的是最外層的那個tr,而不是item2外面的那個tr
而你現在要找最外層那個tr裡面的第二個td

  
... /*<-選到這個*/
item1 12345678910
item2 12345678910

所以最後寫法是
  webdriver.By.xpath("//table//tbody//tr//table//tr[contains(.,'item2')]//td[2]"))

沒有留言:

張貼留言