【问题标题】:How can I check if an element attribute returns "display: none" in selenium?如何检查元素属性是否在硒中返回“显示:无”?
【发布时间】:2017-11-22 14:55:36
【问题描述】:

使用 selenium,我想在某个网站上检查用户名“Natalie”是否可用。如果不是,该网站会弹出一个弹出窗口,说该名称不可用,但我不知道如何专门检查弹出窗口,因为它在 innerHTML 中。我决定获取并检查弹出窗口的属性,因为当用户名可用时它返回“显示:无”,但它仍然无法正常工作。

element = driver.find_element_by_xpath("""//*[@id="username"]""")
element.send_keys("Natalie")
elementcheck = driver.find_element_by_xpath("""//*[@id="username-exists"]""")
style = elementcheck.get_attribute('style')
if 'none' in style:
    print("Natalie is taken.")
else:
    print("Natalie is not taken.")

HTML 元素是(当用户名可用时):

<p id="username-exists" class="error-username feedback error" style="display: none;">Username is already taken.</p>

HTML 元素是(当用户名不可用时):

<p id="username-exists" class="error-username feedback error" style="">Username is already taken.</p>

【问题讨论】:

  • 您应该尝试使用 value_of_css_property('display') 方法
  • 当用户不在时你能分享 HTML 吗?
  • @DebanjanB 你的意思是在框中什么都没有输入?这与用户名可用时相同。我用用户名不可用时显示的内容更新了它。
  • @ally 我同意你的第二个 HTML。但我猜你的第一个 HTML 不正确。当用户不存在时,我认为 &lt;p&gt; 标签根本不可见。同意吗?
  • @DebanjanB 检查时它总是可见的。唯一的区别是,当有可用的用户名时,还有“style="display: none;"” 以隐藏“用户名已被占用”弹出窗口。

标签: python python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

如果一个元素的属性包含 style="display: none;"这意味着元素是 Hidden 然后 Selenium 将无法与元素交互。因此,根据您的问题,如果您想检查是否要检查 Display Name 的可用性,您可以使用以下代码块:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
driver.get("https://playdauntless.com/accounts/")
display_name = driver.find_element_by_xpath("//input[@id='username']")
display_name.send_keys("Natalie")
display_name.submit()
try :
    my_style = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH,"//p[@id='username-exists']")))
    print("Natalie is taken.")
except :
    print("Natalie is not taken.")

控制台输出:

Natalie     => Natalie is taken.
Debanjan    => Debanjan is not taken.

【讨论】:

    【解决方案2】:

    为您的元素尝试 is_displayed() 方法:

    if elementcheck.is_displayed():
        print("Natalie is taken.")
    else:
        print("Natalie is not taken.")
    

    【讨论】:

    • 不起作用。程序只是跳到 else:,即使名称已被占用。
    • 当您键入或单击按钮或按下 Tab 键后,网页会检查名称的可用性?
    • 输入名称后,无需单击按钮或击键。
    猜你喜欢
    • 2021-03-29
    • 2022-01-10
    • 2011-10-25
    • 2015-01-12
    • 2020-08-13
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多