如何查找有时出现在页面上的文本?一个典型的例子是密码错误。然后将出现一条消息,指出密码输入错误,我需要对此消息进行断言。该消息出现在此块<td colspan = "2" style = "color: Red;" align = "center"> Wrong name or password.</td>.
中,不幸的是,我使用xpath输入的代码找不到我的文本。
请参阅:
wait = WebDriverWait (driver 10)
text_tag = wait.until (EC.presence_of_element_located ((By.XPATH, "/html/body/form/div[3]/div[2]/div[2]/table/tbody/tr[1]/td[1]/div/div/div/div/div/div/div/table/tbody/tr[1]/td/table/tbody/tr[1]/td[2]/b")))
if text_tag:
assert text_tag.text == "Incorrect name or password."
print (text_tag.text)
print ("Found - OK")
else:
exit()
答案 0 :(得分:2)
好的,谢谢您的帮助。这是功能的最终脚本。有必要将XPATH更改为CSS选择器:
error_message = driver.find_element_by_css_selector('td[style = "color: Red;"]')
if error_message:
assert error_message.text == "Incorrect name or password."
print (error_message.text)
print ("Found - OK")
else:
exit()
print("Not FOUND")
driver.implicitly_wait(0)
答案 1 :(得分:1)
您可以设置临时隐式等待而不是WebDriverWait
,并使用find_elements
检查元素是否存在。这将查找元素长达10秒,如果该元素存在,则返回的列表将不会为空。
driver.implicitly_wait(10)
error_message = driver.find_elements_by_xpath('//*[contains(., "Incorrect name or password")]')
if error_message:
assert error_message[0].text == "Incorrect name or password."
print (text_tag.text)
print ("Found - OK")
driver.implicitly_wait(0)
请注意,请勿使用绝对的xpath
/html/body/...
,它会使定位器变得脆弱。
答案 2 :(得分:-1)
尝试以下代码:
try:
wait = WebDriverWait(driver, 15)
text_tag =wait.until(EC.visibility_of_element_located("Xpath"))
if text_tag:
assert text_tag.text == "Incorrect name or password."
print (text_tag.text)
print("Found - OK")
else:
exit()
except:
exit()
print("Not FOUND")