1. 程式人生 > 其它 >對button進行了顯示等待依然不可點選的踩坑記錄

對button進行了顯示等待依然不可點選的踩坑記錄

背景:

使用企業微信進行自動化新增成員測試時,在通訊錄中點選【新增成員】程式進入不到填寫成員資訊頁面,其中也對該【新增成員】按鈕進行了顯式等待,依然無法進入成員資訊頁面。

初始程式碼例項:

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方法進行迴圈等待。