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

In python selenium get_attribute('value') does not return None when attribute does not exist in web element

提问人:charm2023 提问时间:11/10/2023 最后编辑:charm2023 更新时间:11/10/2023 访问量:40

问:

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

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

我想返回“None”,因为“value”属性不存在。

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。

python selenium-webdriver 属性 返回 nonetype

评论

0赞 John Gordon 11/10/2023
我猜元素总是有一个属性,即使它没有在 html 中明确给出。这就是元素的意义所在,对吧?它们允许用户输入一些。如果用户未输入任何内容,它将是一个空白字符串。<input>value<input>
0赞 charm2023 11/10/2023
但是如果我这样做了,我的 if 条件不会是真的: if new_phone2.get_attribute('value') == “ ”: 这仍然不起作用。
1赞 John Gordon 11/10/2023
这看起来像是你正在将它与一个实际上有一个空格的字符串进行比较。但它将是一个空字符串,它不会有空格。即你想要 ,而不是 .""" "
0赞 charm2023 11/10/2023
没有空间的报价有效,谢谢!!

答:

0赞 Payrfix 11/10/2023 #1

如果你检查它的返回类型,它说所以无论如何都不会被评估为 true。get_attributestrif new_phone2.get_attribute('value') == None:

当一个元素没有你正在搜索的属性时,它将返回一个可以被评估为虚假值的元素。""

更新后的代码应为

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

现在,如果您也想将空格视为 false,那么您可以改用它

if not new_phone2.get_attribute('value').strip():