0
自動化一些測試時,我遇到了一些問題 - 主要是WebDriverException,點擊將被另一個對象捕獲。我可以通過使用webdriverwait爲元素消失來解決問題 - 這是一種以模式顯示的滑動成功消息,但異常消息讓我思考;而不是使用明確的等待,是否有可能捕獲異常,解析文本並提取對象的一些可識別信息,然後將其用於該方法的webdriverwait?是否有可能從webdriver異常文本中獲取定位符?
因此,舉例來說,如果我這樣做:
self.wait_for_success_modal_to_disappear(context)
self.element_is_clickable(context, mark_as_shipped).click()
它會工作,但如果我註釋掉wait方法,它會失敗,錯誤消息:
WebDriverException: Message: unknown error: Element is not clickable at
point (x, y). Other element would receive the click: <div class="success-modal">...</div>
我在想的是修改element_is_clickable
方法,在異常處理方法中包含基於異常文本的可重用方法,有點像這樣:
def element_is_clickable(self, context, locator):
try:
WebDriverWait(context.driver, 15).until(
EC.visibility_of_element_located(locator)
)
WebDriverWait(context.driver, 15).until(
EC.element_to_be_clickable(locator)
)
return context.driver.find_element(*locator)
except WebDriverException:
error_message = repr(traceback.print_exc())
modal_class_name = <<method to grab everything between the quotation marks>>
WebDriverWait(context.driver, 15).until(
EC.invisibility_of_element_located((By.CLASS_NAME, modal_class_name))
)
WebDriverWait(context.driver, 15).until(
EC.visibility_of_element_located(locator)
)
WebDriverWait(context.driver, 15).until(
EC.element_to_be_clickable(locator)
)
return context.driver.find_element(*locator)
現在,我知道這不是正確的方式來處理這個,因爲錯誤是在click()而不是在識別元素,但我最感興趣的是捕獲和解析異常消息的可能性,並使用該數據以一種有用的方式。這是可能嗎?