使用'检查元素是否存在;由';来自SeleniumWebDriver和Python

使用'检查元素是否存在;由';来自SeleniumWebDriver和Python,python,webdriver,Python,Webdriver,我试图验证页面上是否存在文本。通过ID验证元素非常简单,但尝试使用文本验证元素是不正确的。而且,我找不到用于验证网页上文本的正确属性 适用于按属性使用ID的示例 self.assertTrue(self.is_element_present(By.ID, "FOO")) self.assertTrue(self.is_element_present(By.TEXT, "BAR")) 我尝试使用的示例(不起作用)用于按属性使用的文本 self.assertTrue(self.is_elemen

我试图验证页面上是否存在文本。通过ID验证元素非常简单,但尝试使用文本验证元素是不正确的。而且,我找不到用于验证网页上文本的正确属性

适用于按属性使用ID的示例

self.assertTrue(self.is_element_present(By.ID, "FOO"))
self.assertTrue(self.is_element_present(By.TEXT, "BAR"))
我尝试使用的示例(不起作用)用于按属性使用的文本

self.assertTrue(self.is_element_present(By.ID, "FOO"))
self.assertTrue(self.is_element_present(By.TEXT, "BAR"))
我也尝试过这些,但有*个错误(见下文)

*错误:AttributeError:“WebDriver”对象没有属性“is\u element\u present”


我在尝试通过.Image验证
时也遇到了同样的问题

首先,不鼓励这样做,与其在页面中查找文本,不如更改测试逻辑

下面是您如何创建自己的
is\u text\u present
方法,如果您真的想使用它:

def is_text_present(self, text):
    try:
        body = self.driver.find_element_by_tag_name("body") # find body tag element
    except NoSuchElementException, e:
        return False
    return text in body.text # check if the text is in body's text
对于图像,逻辑是将定位器传递到图像中。(我认为WebDriver API中不存在
is\u element\u present
,但我不确定.ID的
是如何工作的,让我们假设它正在工作。)


据我所见,is_元素_present是由Firefox扩展(Selenium IDE)生成的,看起来像:

def is_element_present(self, how, what):
    try: self.driver.find_element(by=how, value=what)
    except NoSuchElementException: return False
    return True
“By”是从selenium.webdriver.common导入的:

from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
有几个“By”常量用于处理每个API find_元素,例如:

 self.assertTrue(self.is_element_present(By.LINK_TEXT, "My link"))

验证链接是否存在,如果不存在,则避免selenium引发的异常,从而允许正确的单元测试行为。

我喜欢将整个内容包装到自定义断言中

from selenium.common.exceptions import NoSuchElementException

def assertElementIsPresentByXPath(self, xpath, msg=None):
    try:
        self.browser.find_element_by_xpath(xpath)
        self.assertTrue(True, msg)
    except NoSuchElementException:
        self.assertTrue(False, msg)

def test_element_10_should_exists(self):
    self.browser.get('url/to/test')
    self.assertElementIsPresentByXPath('//a[@id=el_10]')

这是从selenium.webdriver.common.by import by导入的
,我看到
标识符
ID
name
xpath
dom
sizzle\u选择器
链接文本
标记名称
默认值
键属性
是的,没有任何属性。这就引出了建议的问题“如何检查文本”,您可以找到body元素,获取其文本,然后检查是否包含文本。但这是非常令人沮丧的,我建议你们改变你们的逻辑。你们的路已经死了。我的检查失败。这是一个:)
from selenium.common.exceptions import NoSuchElementException

def assertElementIsPresentByXPath(self, xpath, msg=None):
    try:
        self.browser.find_element_by_xpath(xpath)
        self.assertTrue(True, msg)
    except NoSuchElementException:
        self.assertTrue(False, msg)

def test_element_10_should_exists(self):
    self.browser.get('url/to/test')
    self.assertElementIsPresentByXPath('//a[@id=el_10]')