5

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

使用By属性的 ID 示例

self.assertTrue(self.is_element_present(By.ID, "FOO"))

示例我尝试使用By属性对文本使用(不起作用)

self.assertTrue(self.is_element_present(By.TEXT, "BAR"))

我也试过这些,带有 *error (下)

self.assertTrue(self.is_text_present("FOO"))

self.assertTrue(self.driver.is_text_present("FOO"))

*错误:AttributeError:“WebDriver”对象没有属性“is_element_present”

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

4

3 回答 3

5

据我所知,is_element_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_element_by_*,例如:

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

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

于 2014-02-12T22:33:52.077 回答
2

首先,不鼓励这样做,最好更改测试逻辑而不是在页面中查找文本。

is_text_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

对于图像,逻辑是将定位器传递给它。(我认为is_element_presentWebDriver API 中不存在,不确定你是如何By.ID工作的,让我们假设它正在工作。)

self.assertTrue(self.is_element_present(By.ID, "the id of your image"))
# alternatively, there are others like CSS_SELECTOR, XPATH, etc.
# self.assertTrue(self.is_element_present(By.CSS_SELECTOR, "the css selector of your image"))
于 2013-07-01T23:11:01.073 回答
0

我喜欢将整个事情包装成一个自定义断言

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]')
于 2014-11-14T09:57:39.283 回答