我有一个测试,其中包含位于iframe
的表单上传文件的方法。
问题是测试不稳定,有时会因错误而失败(运行三次以获取错误示例,第三次运行失败):
def fill_offer_image(self):
driver = self.app.driver
driver.switch_to.frame(driver.find_elements_by_name("upload_iframe")[3])
E IndexError: list index out of range
我有implicitly wait = 10
,因为你可以考虑页面上有几个相同类的iframe,所以我被迫使用数组。有时并非所有(或所有?)iframe都已加载。
有人有想法如何提高测试的稳定性吗? 它可能与iframe本身的机制有关吗?
答案 0 :(得分:2)
我会使用Explicit Wait和等待name="upload_iframe"
的框架元素数量变为4 ,方法是写custom expected condition:
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.support import expected_conditions as EC
class wait_for_n_elements(object):
def __init__(self, locator, count):
self.locator = locator
self.count = count
def __call__(self, driver):
try:
count = len(EC._find_elements(driver, self.locator))
return count == self.count
except StaleElementReferenceException:
return False
用法:
wait = WebDriverWait(driver, 10)
wait.until(wait_for_n_elements((By.NAME, 'upload_iframe'), 4))
driver.switch_to.frame(driver.find_elements_by_name("upload_iframe")[3])
答案 1 :(得分:1)
让我们通过插入以下代码
为iframe加载一些时间来尝试这个Import time
## Give time for iframe to load ##
time.sleep(xxx)
希望这会有用