我最近开始将自动化套件从WatiN转换为Selenium2。在这两种情况下,我都一直使用C#。尽管这些问题看似简单,但我一直在寻找答案大约2周,但几乎没有成功。

1)有没有办法断言某个元素存在?我不得不诉诸于创建一个abject,并期望如果页面上不存在异常,则抛出该异常。在WatiN中,它很简单:assert.isTrue(browser.textField(Find.ById(elementId)).exists);

2)是否可以断言页面上是否存在文本?我还没有找到解决方法。在WatiN中,我的测试应该是:assert.isTrue(browser.containsText("text"));

预先感谢。

#1 楼

我根本不会使用WebDriverBackedSelenium类。它被设计为桥梁课程,以帮助人们使用Selenium RC API(正在做的工作很少)将测试迁移到Selenium WebDriver API。相反,我会在自己的测试中使用WebDriverBackedSelenium类使用的技术。

在断言元素存在的情况下,您第一次需要对其进行纠正。捕获调用NoSuchElementException时抛出的IWebDriver.FindElement(),并且元素不存在。

要测试页面上是否存在文本,请执行以下操作:

public bool PageContainsText(IWebDriver driver, string textToFind)
{
    return driver.FindElement(By.tagName("body")).Text.Contains(textToFind);
}


尽管从C#绑定来看可能并不完全清楚,但本质上是WebDriverBackedSelenium方法在幕后所做的。

#2 楼

isElementPresent(String locator)对象没有isTextPresent(String text)Selenium函数吗?

评论


啊,我没有意识到我必须创建一个WebDriverBackedSelenium实现才能使用selenium命令。现在,这似乎要简单得多。非常感谢您带头寻找哪里!

– Lyndon Vrooman
2011年5月4日14:47

#3 楼

回答第一个问题:

如果使用的是Selenium / Webdriver,则可以使用WebDriverWait类(请参见此链接),也可以使用driver.FindElements(..),因为如果没有元素,它不会抛出被发现。然后,您可以使用一些linq魔术来获得第一场比赛。所以看起来像这样:driver.FindElements(..).FirstOrDefault()

#4 楼

好吧,我知道Selenium中有一个名为verifyIfTextPresent的函数可以使用。
检查此链接以获取更多信息-断言/验证文档