我们有一个使用Selenium Webdriver开发的关键字驱动框架。 在运行脚本时,一些测试用例在第一次运行时会超时。当我第二次运行相同的测试用例时,上次传递失败,但这次其他一些测试用例都失败了。
有人可以建议是否需要在框架/配置部分进行任何操作。
我在Windows 7上使用IE9,Java 6,Selenium 2.40,在官方Selenium网站上使用IE驱动程序。
答案 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有很多问题。
实现效率的唯一方法是通过正确处理异常和使用等待语句