使用 Selenium 从输入元素 (type=submit) 获取文本

Getting text from input element (type=submit) using Selenium

我正在试验一些 Web 测试自动化。
为了练习我拿了 Sause demo site
它在页面上定义了登录按钮
<input type="submit" class="submit-button btn_action" data-test="login-button" id="login-button" name="login-button" value="Login">
它在屏幕上的文字是“LOGIN”(大写)。
我想从登录按钮获取文本。
首先,我尝试只使用 login_button.text 和 returns 空字符串。好的,很清楚为什么和预期。
然后我尝试获取 login_button 的 属性 值,它是 returns“登录”字符串。
我检查了登录按钮是否应用了以下 CSS 样式并使文本大写。

.submit-button {
    text-transform: uppercase;
}

但是有没有可能从这个按钮中获取文本的显示方式(“登录”而不是“登录”)?

我使用的代码示例:

driver = webdriver.Chrome(CHROME_DRIVER_PATH)
driver.get("https://www.saucedemo.com/")
login_button = driver.find_element_by_id("login-button")
print(login_button.text)  # returns empty string
print(login_button.get_property("value"))  # returns "Login"
driver.quit()

Selenium 读取 HTML DOM 但不是屏幕上显示的内容。

登录按钮实际上有一个值属性设置为Login

要提取 value 属性的值,您可以使用以下任一方法 :

  • 使用CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#login-button"))).get_attribute("value"))
    
  • 使用XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='login-button']"))).get_attribute("value"))
    
  • 控制台输出:

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

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

正如您正确指出的那样,值 Login 应用以下 CSS 样式:

text-transform: uppercase;

以大写形式显示为 LOGIN.

直接的答案是 Selenium 向 DOM 发出 an HTTP 请求,它可以 update/retrieve info from DOM.

在您的情况下,正如您所强调的那样,进行此更改的是 CSS 属性(文本转换)。

您可以阅读此 属性,并根据信息您可以 Python upper()lower()

我建议从 CSS property 进行验证并使用

driver.get("https://www.saucedemo.com/")

login_button = driver.find_element_by_id("login-button")
actual_login_button_text = login_button.get_attribute('value')
print('Actual text', actual_login_button_text)
text_type = login_button.value_of_css_property('text-transform')
print('CSS text type', text_type)

change_text = ''
if text_type == 'uppercase':
    change_text = actual_login_button_text.upper()
if text_type == 'lowercase':
    change_text = actual_login_button_text.lower()


print('Modified text', change_text)

输出:

Actual text Login
CSS text type uppercase
Modified text LOGIN