使用 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
我正在试验一些 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