元素定位

一般采用隐式等待、显式等待,但有时还不能符合我们的要求,所以我用的解决方案是做了一次封装,采用try:except包括定位元素,如果定位失败,采用第二种方式进行定位

def find_element(self, *loc, xpath=None):
          """        *loc:表示定位方式、定位元素
          xpath:通过xpath方式定位        return:定位到的元素对象
          """
         try:
               return WebDriverWait(self.driver, 20, 2).until(EC.presence_of_element_located(loc))
          except TimeoutException:
                try:
      return WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath)))
               except TimeoutException:
                     print('元素%s不存在' % loc)

使用方式也很简单,直接调用即可,如果ID方式无法定位到元素,采用xpaht方式进行定位

  def select_checkbox(self):
           self.find_element(By.ID, 'checkbox-0-s', xpath='//*[@id="checkbox-0-s"]').click()
对象操作

常见的操作是对元素进行点击,但有的元素明明是已经被点击,但未生效,针对这种现象,我同样做了封装

def find_element_click(self, *loc, s=3):
          """定位元素并进行点击操作"""
         ele = self.find_element(*loc)
         ele.click()
         time.sleep(2)
          try:
               WebDriverWait(self.driver, s).until(EC.presence_of_element_located(loc)).click()
         except TimeoutException:
               pass

先对元素进行定位,定位到元素后进行点击操作,再次定位该元素,如果再次定位到再次进行点击操作,反之结束操作

02-12 21:42