Selenium Element Wait


from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

wait = WebDriverWait(driver, 10)

element = wait.until(EC.presence_of_element_located((By.ID, 'element-id')))

上述代码中,WebDriverWait类的第一个参数是浏览器驱动对象,第二个参数是等待时间,单位为秒;EC类是等待条件的集合,其中presence_of_element_located表示元素存在;By类指定元素定位方式,例如ID、CSS Selector、XPath等。使用显式等待可以精确控制等待时间和等待条件,因此是一种比较稳定的等待方式。

二、隐式等待

隐式等待是Selenium提供的另一种等待方式,它通过代码指定等待时间来等待元素出现。与显式等待不同的是,隐式等待是全局性的,即对所有查找元素的方法都生效。下面是一个使用隐式等待等待元素出现的示例代码:


driver = webdriver.Chrome()

driver.implicitly_wait(10)

element = driver.find_element_by_id('element-id')

上述代码中,implicitly_wait方法的参数是等待时间,单位为秒;find_element_by_id是查找元素的方法,如果元素在等待时间内出现,则立即返回元素对象,否则抛出异常。使用隐式等待可以简化代码,但是无法控制等待条件,因此可能会出现等待时间不够或等待时间过长的情况。

三、动态等待

动态等待是一种基于JavaScript的等待方式,它通过重复执行JavaScript代码来等待元素出现。常见的JavaScript代码包括document.getElementById、document.getElementsByClassName、document.querySelector等。下面是一个使用动态等待等待元素出现的示例代码:


driver = webdriver.Chrome()

element = driver.execute_script('return document.getElementById("element-id")')

上述代码中,execute_script方法执行JavaScript代码,返回元素对象。使用动态等待可以避免硬等待带来的等待时间过长的问题,但是需要编写复杂的JavaScript代码,不够直观。

四、结合多种等待方式

在实际测试中,我们往往需要结合多种等待方式来等待元素出现,以达到更好的效果。例如,可以使用显式等待等待元素可点击,然后使用隐式等待等待元素存在,最后使用动态等待等待元素可见。下面是一个使用多种等待方式等待元素出现的示例代码:


driver = webdriver.Chrome()

wait = WebDriverWait(driver, 10)

element = wait.until(EC.element_to_be_clickable((By.ID, 'element-id')))

driver.implicitly_wait(10)

element = driver.find_element_by_id('element-id')

element = driver.execute_script('return document.getElementById("element-id")')

上述代码中,先使用显式等待等待元素可点击,然后使用隐式等待等待元素存在,最后使用动态等待等待元素可见。使用多种等待方式可以提高测试的稳定性和效率,但是也会增加代码的复杂度和维护成本。

综上所述,Selenium提供了多种等待方式来等待元素出现,包括显式等待、隐式等待、动态等待和多种等待方式的结合。在实际测试中,我们需要根据具体情况选择适合的等待方式,以达到更好的测试效果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容