如何识别仅在硒中偶尔出现的文本

时间:2019-06-19 07:30:24

标签: python selenium selenium-webdriver

如何查找有时出现在页面上的文本?一个典型的例子是密码错误。然后将出现一条消息,指出密码输入错误,我需要对此消息进行断言。该消息出现在此块<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()

3 个答案:

答案 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")