0

我很困惑这是检查元素是否存在的最佳和正确方法?使用try-exceptif-else?尝试查找元素时,两者有什么区别和优缺点?

def find_logo():
    return driver.find_elements(By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")

if find_logo(): 
    print("Found the logo")
else:
    print("Cannot find the logo")

所以会得到与 try 相同的结果,除了:

def find_logo():
    return driver.find_element(By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")

try:
    find_logo()
    print("Found the logo")
except NoSuchElementException:
    print("Cannot find the logo")

两者似乎都以相同的方式工作,但哪种方法是正确的?

4

2 回答 2

1

典型地,theif-elsetry-exceptlogic 都需要修改,但是它们需要根据您的用例来实现。


if find_logo()if find_logo()将始终成功,就像def find_logo()您使用的那样find_elements(),它可能根本不会返回任何元素。在这种情况下,您可能需要检查列表大小是否不是0


尝试: find_logo():在未找到特定try: find_logo()元素时,似乎更好地组织了另一个NoSuchElementException检查。


代码优化

但是根据最佳实践,在查找元素时,您需要诱导WebDriverWait并且visibility_of_element_located()您可以使用以下逻辑:

try:
    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".navbar-brand [src='/logo/logo.svg']")))
    print("Found the logo")
except TimeoutException:
    print("Cannot find the logo")
    

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
于 2020-11-25T11:03:23.763 回答
-1

在第一种情况下,函数返回一个列表,在第二种情况下,函数返回您正在寻找的 Web 元素。

于 2020-11-25T09:33:47.813 回答