2017-01-17 2 views
1

я определил два родитель XPath в инициализации что-то вроде этого ниже:Определение несколько родительских XPath в методе класса

def __init__(self, driver, fieldName): 

     self.driver = driver 

     try: 
      try: 
       self.text = self.driver.find_element_by_xpath("//form[@name='quickeditfrm']//tr/th/label[text()='%s']" % fieldName) 
      except: 
       self.text = self.driver.find_element_by_xpath(QuickEditLocatars.ROWPARENT % fieldName) 

     except: 
      try: 
       self.text = self.driver.find_element_by_xpath(QuickEditLocatars.ROWPARENT % (fieldName + ":")) 
      except: 
       self.text = self.driver.find_element_by_xpath("//form[@name='quickeditfrm']//tr/th/label[text()='%s']" % (fieldName + ":")) 

Но я нахожусь в ситуации, когда я должен работать с три родительских XPath. Родительский xpath отличается в зависимости от страниц. Но на каждой странице не будет всех трех xpath. Он будет иметь только один родительский xpath.

Я знаю, что могу использовать try и except, но с двумя или более родительскими xpath затрудняет сохранение кода и делает его беспорядочным. какие-либо предложения?

ответ

1

Один из способов решения этого вопроса - объединить выражения XPath с использованием «|» (средства «или») Оператор:

def __init__(self, driver, fieldName): 
    self.driver = driver 

    expressions = [ 
     "//form[@name='quickeditfrm']//tr/th/label[text()='%s']" % fieldName, 
     QuickEditLocatars.ROWPARENT % fieldName, 
     QuickEditLocatars.ROWPARENT % (fieldName + ":"), 
     "//form[@name='quickeditfrm']//tr/th/label[text()='%s']" % (fieldName + ":") 
    ] 
    self.text = self.driver.find_element_by_xpath(" | ".join(expressions) 

Вам может понадобиться добавить одну попытку/за исключением обрабатывать «негативный» случай, когда элемент не был найден какой-либо из выражений вообще.

+0

большой. последний вопрос, что такое использование трубы здесь? – user7242550

+1

@ user7242550 уверен, это в основном означает логическое «или». – alecxe

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