在执行测试脚本期间,Selenium Webdriver非常不一致

时间:2014-04-25 11:24:25

标签: java selenium selenium-webdriver webdriver

我们有一个使用Selenium Webdriver开发的关键字驱动框架。 在运行脚本时,一些测试用例在第一次运行时会超时。当我第二次运行相同的测试用例时,上次传递失败,但这次其他一些测试用例都失败了。

有人可以建议是否需要在框架/配置部分进行任何操作。

我在Windows 7上使用IE9,Java 6,Selenium 2.40,在官方Selenium网站上使用IE驱动程序。

3 个答案:

答案 0 :(得分:3)

由于种种原因,您的测试可能很脆弱。

<强> 1。同步 - 请勿使用Thread.sleep。您应该考虑在测试中等待机制。    WebDriver中有两种类型的等待。隐含等待和明确    等待。

<强> 一个。隐含等待 - 例如,WebDriver下方将在内部轮询最多 30秒,然后投掷NoSuchElementFoundException

 driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

<强> 湾显式等待 - 在这里,您要告诉WebDriver等待某个条件满足。例如,下面我正在等待链接Account可供点击。一旦其可用的WebDriver将返回WebElement,以便我可以点击它。看看已经实现的一些有用的ExpectedConditions

WebDriverWait wait = new WebDriverWait(driver,30/*Timeout in seconds*/);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("Account")));
element.click();

<强> 2。数据依赖性 - 确保您的测试彼此独立,并且他们不共享数据。如果测试共享数据使其变脆,则测试可能会发生冲突

第3。在Xpath上使用CSS - 找到我的答案here,了解原因

<强> 4。一个抽象层 - 确保从页面逻辑中抽象出抽象的测试逻辑。使用PageObjects和PageFactory技术来更好地维护套件

最后阅读Automated Web Testing: Traps for the Unwary上的Simon Stewarts博客了解详情。

答案 1 :(得分:0)

我建议确保您使用的关键字不是动态生成的。

我曾经在一个网站上工作过,其中所有的ID都是这样的:&#39; ext-gen123&#39;,然后下一次运行,同一个元素会有ID:&# 39; ext-gen124&#39;,但之后的运行会将ID返回到&#39; ext-gen123&#39; ...

在这种情况下,您必须使用其他标识符来定位元素 - 可能是CssClass或XPath。

答案 2 :(得分:-2)

Sainath,

运行TestCases的秘诀在于您编写TestCases的方式。使用流利等待,在元素可见并启用之前等待并使用html ID&#39;测试用例中的使TC高效。 IE和Selenium几乎所有时间都不相处...我的意思是,IE和Selenium有很多问题。

实现效率的唯一方法是通过正确处理异常和使用等待语句