小能豆

在 python 中,当 Web 元素中不存在属性时,selenium get_attribute('value') 不会返回 None

python

我的表单中有一个文本框,我想知道它是否为空。如果属性不存在,get_attribute() 应该返回 None,但它什么也没有返回,空白、空白区域。我想检查下面的 Web 元素中是否不存在该属性值。这是网络元素:

<input type="text" name="newPhone2" size="12" maxlength="10">

我想返回“无”,因为“值”属性不存在。

new_phone2 = self.driver.find_element(By.NAME, "newPhone2")
if new_phone2.get_attribute('value') == None:
 # Do blah blah blah

即使 value 不是 Web 元素中的属性,get_attribute() 也不会返回 None。它什么也不返回…例如:

print(new_phone2.get_attribute('value')) 

找到该元素,但打印空白而不是 None。我希望它打印 None,所以我可以使用 None 作为我的 if 条件。我什至尝试过空引号作为我的条件,但这不起作用。

为什么它是空白的并且不返回 None ?如果值存在,则返回该值,但当值不存在时不返回 None 。

如果 web 元素有值,它将返回该值。例如,

<input type="text" name="newPhone2" value="123456' size="12" maxlength="10">
print(new_phone2.get_attribute('value')) 

这将打印 123456。但是如果 value 属性不存在,则不会返回 None。


阅读 65

收藏
2023-11-10

共1个答案

小能豆

在 Selenium 中,get_attribute() 方法确实会返回 None,如果请求的属性不存在。在你的代码中,问题可能出在条件检查上。你应该使用 is 操作符来检查是否为 None,而不是使用 ==。下面是一个修正后的代码片段:

new_phone2 = self.driver.find_element(By.NAME, "newPhone2")
if new_phone2.get_attribute('value') is None:
    # Do blah blah blah
    print("Value is None")
else:
    # Do something else
    print("Value is:", new_phone2.get_attribute('value'))

这样,如果 get_attribute('value') 返回 None,条件将为真,执行相应的代码块。

至于为什么 get_attribute('value') 返回空字符串而不是 None,可能是因为在 HTML 元素中,value 属性存在但没有值。此时,get_attribute('value') 会返回空字符串。检查属性是否存在,然后再检查值是否为 None 是一个好的做法。

2023-11-10