對button進行了顯示等待依然不可點選的踩坑記錄
阿新 • • 發佈:2021-08-29
背景:
使用企業微信進行自動化新增成員測試時,在通訊錄中點選【新增成員】程式進入不到填寫成員資訊頁面,其中也對該【新增成員】按鈕進行了顯式等待,依然無法進入成員資訊頁面。
初始程式碼例項:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions class TestContact: def setup(self): options = webdriver.ChromeOptions() options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 這樣寫和上面的效果一樣 # self.options.debugger_address = "127.0.0.1:9222" self.driver = webdriver.Chrome(options=options) self.driver.get('https://work.weixin.qq.com/wework_admin/frame#index') self.driver.implicitly_wait(5) def teardown(self): self.driver.quit() def test_contact(self): self.driver.find_element(By.ID, 'menu_contacts').click() # time.sleep(2) WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, '.js_has_member div:nth-child(1) .js_add_member'))) self.driver.find_element(By.CSS_SELECTOR, '.js_has_member div:nth-child(1) .js_add_member').click() # 點選新增成員 self.driver.find_element(By.ID, 'username').send_keys('Bob') # 填寫姓名
頁面會報錯:no such element
解決辦法:
def test_contact(self): self.driver.find_element(By.ID, 'menu_contacts').click() # time.sleep(2) WebDriverWait(self.driver, 10).until(self.wait_element) self.driver.find_element(By.ID, 'username').send_keys('Bob') # 填寫姓名 def wait_element(self, x): # 如果沒有進行新增成員資訊頁面,就一直迴圈點選 size = len(self.driver.find_elements(By.ID, 'username')) if size < 1: self.driver.find_element(By.CSS_SELECTOR, '.js_has_member div:nth-child(1) .js_add_member').click() # 點選新增成員 return size >= 1
新增一個wait_element方法,結合WebDriverWait的until方法進行迴圈等待。