python
  • selenium
  • selenium-webdriver
  • 2016-02-28 3 views 0 likes 
    0

    Использование Python Селена Я пытаюсь проверить, если элемент виден, а затем нажмите на него, если это ...Python Селена щелкните элемент, если виден

    # Check to see if element is visible 
        myelement = driver.find_element_by_xpath("//a[@id='form1']") 
    
        if myelement.is_displayed(): 
         print (" ") 
        else: 
         driver.find_element_by_xpath("//a[@id='form1']").click 
    

    Это не работают, куда я иду неправильно?

    ответ

    3

    Предполагая, что ваш xpath правильный, вы должны использовать click(), а не click. Это метод, а не атрибут.

    0

    Вы также можете сделать попробовать/за исключением:

    try: 
        driver.find_element_by_xpath("//a[@id='form1']").click() # will click element if visible 
    
    except: 
        print "Element not visible." 
    
    2

    У вас есть две проблемы

    • click является метод, он должен быть click()
    • В настоящее время вы пытаетесь нажать, если кнопка не отображается. Он должен быть

      if myelement.is_displayed(): 
          driver.find_element_by_xpath("//a[@id='form1']").click() 
      else: 
          print (" ") 
      

    Вы также не должны переместить элемент нажать на него

    myelement = driver.find_element_by_xpath("//a[@id='form1']") 
    
    if myelement.is_displayed(): 
        myelement.click() 
    else: 
        print (" ") 
    
    0

    is_displayed()! = Видна

    Итак, .click () не работает, если элемент находится вне экрана, но все еще «отображается»

    Правильный шаг: вам нужно прокрутить элемент в экран и видимым, а затем нажмите кнопку()

    +0

    Добро пожаловать в StackOverflow: если вы разместите код , XML или образцы данных, пожалуйста, выделите эти строки в текстовом редакторе и нажмите кнопку «образцы кода» ({}) на панели инструментов редактора или с помощью Ctrl + K на клавиатуре, чтобы красиво отформатировать и выделить синтаксис! – WhatsThePoint

    1

    Лучший способ сделать это путем создания базового класса и переосмысление кнопкой мыши и найти метод и использовать вместо этого:

    from selenium         import webdriver 
    from selenium.webdriver.support.ui   import WebDriverWait 
    from selenium.webdriver.support.select  import Select 
    from selenium.webdriver.support    import expected_conditions as EC 
    from selenium.webdriver.common.by    import By 
    from abc          import abstractmethod 
    
    
    
    
    class LocatorMode: 
    
    XPATH = "xpath" 
    CSS_SELECTOR = "cssSelector" 
    NAME = "name" 
    ID = "id" 
    TAG_NAME = "tagName" 
    
    
    class BasePage(object): 
    
    def __init__(self, driver): 
        self.driver = driver 
    
    
    def wait_for_element_visibility(self, waitTime, locatorMode, Locator): 
        element = None 
        if locatorMode == LocatorMode.ID: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.visibility_of_element_located((By.ID, Locator))) 
        elif locatorMode == LocatorMode.NAME: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.visibility_of_element_located((By.NAME, Locator))) 
        elif locatorMode == LocatorMode.XPATH: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.visibility_of_element_located((By.XPATH, Locator))) 
        elif locatorMode == LocatorMode.CSS_SELECTOR: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.visibility_of_element_located((By.CSS_SELECTOR, Locator))) 
        else: 
         raise Exception("Unsupported locator strategy.") 
        return element 
    
    
    def wait_until_element_clickable(self, waitTime, locatorMode, Locator): 
        element = None 
        if locatorMode == LocatorMode.ID: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.element_to_be_clickable((By.ID, Locator))) 
        elif locatorMode == LocatorMode.NAME: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.element_to_be_clickable((By.NAME, Locator))) 
        elif locatorMode == LocatorMode.XPATH: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.element_to_be_clickable((By.XPATH, Locator))) 
        elif locatorMode == LocatorMode.CSS_SELECTOR: 
          element = WebDriverWait(self.driver, waitTime).\ 
            until(EC.element_to_be_clickable((By.CSS_SELECTOR, Locator))) 
        else: 
         raise Exception("Unsupported locator strategy.") 
        return element 
    
    
    
    def find_element(self, locatorMode, Locator): 
        element = None 
        if locatorMode == LocatorMode.ID: 
         element = self.driver.find_element_by_id(Locator) 
        elif locatorMode == LocatorMode.NAME: 
         element = self.driver.find_element_by_name(Locator) 
        elif locatorMode == LocatorMode.XPATH: 
         element = self.driver.find_element_by_xpath(Locator) 
        elif locatorMode == LocatorMode.CSS_SELECTOR: 
         element = self.driver.find_element_by_css_selector(Locator) 
        else: 
         raise Exception("Unsupported locator strategy.") 
        return element 
    
    
    def fill_out_field(self, locatorMode, Locator, text): 
        self.find_element(locatorMode, Locator).clear() 
        self.find_element(locatorMode, Locator).send_keys(text) 
    
    def click(self, waitTime, locatorMode, Locator): 
        self.wait_until_element_clickable(waitTime, locatorMode, Locator).click() 
    

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

    • Нет связанных вопросов^_^