2015-11-03 1 views
1

ПроблемаКак я могу найти элемент dom с относительным xpath для привязок selenium python?

  1. Найти объект, который включает в себя текст. (Это делается.)
  2. Найти объект рядом с 1. (Это я не могу определить местонахождение)

Примечание: Я не могу использовать регулярные найти элемент по идентификатору, имя, класс, потому что объект 1 изменится на другие страницы ,

HTML код

<table cellspacing="1" cellpadding="2"> 
    <tbody> 
    <tr> 
     <td><span tabindex="-1"><label for="value:1:1:1">companyID</label></span> 
     <input type="hidden" value="companyID" id="fieldName:1:1:1" name="fieldName:1:1:1"> 
     </td> 
     <td> 
     <select name="operand:1:1:1"> 
      <option selected="" value="EQ">equals</option> 
      <option value="LK">matches</option> 
      <option value="UL">not matches</option> 
      <option value="NE">not equal to</option> 
      <option value="GT">greater than</option> 
      <option value="GE">greater than or equals</option> 
      <option value="LT">less than</option> 
      <option value="LE">less than or equals</option> 
      <option value="RG">between</option> 
      <option value="NR">not between</option> 
      <option value="CT">contains</option> 
      <option value="NC">not containing</option> 
      <option value="BW">begins with</option> 
      <option value="EW">ends with</option> 
      <option value="DNBW">does not begin with</option> 
      <option value="DNEW">does not end with</option> 
      <option value="SAID">sounds like</option> 
     </select> 
     </td> 
     <td align="right"> 
     <input type="text" frequencydropfieldname="value:1:1:1" value="123" size="20" id="value:1:1:1" name="value:1:1:1"> 
     <input type="hidden" value="none" id="sort:1:1:1" name="sort:1:1:1"> 
     </td> 
     <td></td> 
    </tr> 
    <tr> 
     <td><span tabindex="-1"><label for="value:2:1:1">componentID</label></span> 
     <input type="hidden" value="componentID" id="fieldName:2:1:1" name="fieldName:2:1:1"> 
     </td> 
     <td> 
     <select name="operand:2:1:1"> 
      <option selected="" value="EQ">equals</option> 
      <option value="LK">matches</option> 
      <option value="UL">not matches</option> 
      <option value="NE">not equal to</option> 
      <option value="GT">greater than</option> 
      <option value="GE">greater than or equals</option> 
      <option value="LT">less than</option> 
      <option value="LE">less than or equals</option> 
      <option value="RG">between</option> 
      <option value="NR">not between</option> 
      <option value="CT">contains</option> 
      <option value="NC">not containing</option> 
      <option value="BW">begins with</option> 
      <option value="EW">ends with</option> 
      <option value="DNBW">does not begin with</option> 
      <option value="DNEW">does not end with</option> 
      <option value="SAID">sounds like</option> 
     </select> 
     </td> 
     <td align="right"> 
     <input type="text" frequencydropfieldname="value:2:1:1" value="ZZ" size="20" id="value:2:1:1" name="value:2:1:1"> 
     <input type="hidden" value="none" id="sort:2:1:1" name="sort:2:1:1"> 
     </td> 
     <td></td> 
    </tr> 

Python код

from selenium import webdriver 
import time 
driver = webdriver.Firefox() 
driver.maximize_window() 
driver.get('file:///C:/Users/gmunteanu/Desktop/test_table.html') 
time.sleep(2) 
print driver.find_elements_by_xpath("//*[contains(text(), 'companyID')]/td[3]/input[1]") 

ответ

1

Для "рядом" есть following-sibling обозначения:

//span[contains(label, 'companyID')]/following-sibling::input 

Кроме того, не могли бы вы просто получить input по value атрибут?

//input[@value = 'companyID'] 

* Предполагая, что вы стремитесь к этому скрытому input элемента.

+0

спасибо за быстрый ответ. Поскольку html довольно запутанный, я скорее использую некоторый псевдокод html. Таким образом:

Смежные вопросы