我们针对现有代码库运行Selenium回归测试,我们的Web应用程序中的某些屏幕使用弹出窗口进行中间步骤。
目前我们使用测试中的命令:
// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");
...大部分时间 。有时,waitForPopUp()
行上的测试将失败
com.thoughtworks.selenium.SeleniumException: Permission denied
有人可以建议更好,更可靠的方法吗?
另外,我们主要在IE6和7上运行这些测试。
答案 0 :(得分:3)
有效!!只是为了让喜欢selenese的人更容易。
这对我来说使用IE7(普通模式)。
多么麻烦。感谢天空中的意大利面怪物,或者我无法在IE中使用它。
<tr>
<td>getEval</td>
<td>selenium.browserbot.getCurrentWindow().open('', 'windowName');</td>
<td></td>
</tr>
<tr>
<td>click</td>
<td>buttonName</td>
<td></td>
</tr>
<tr>
<td>windowFocus</td>
<td>windowName</td>
<td></td>
</tr>
<tr>
<td>waitForPopUp</td>
<td>windowName</td>
<td>3000</td>
</tr>
<tr>
<td>selectWindow</td>
<td>windowName</td>
<td></td>
</tr>
答案 1 :(得分:1)
如果您在* iehta模式下运行,那么您将在这里和那里遇到一些故障。我们在工作中运行Selenium,IE和AJAX似乎存在很多问题。
然而,听起来您遇到的问题是Selenium在完全加载之前尝试访问另一个窗口中的组件。我不确定您的默认超时范围设置为什么,但您可能希望尝试将其增加到60(60000ms)秒左右以解决问题。
除此之外,我建议在Firefox中运行您的测试(使用* chrome),因为它会产生更可靠的结果,但有时由于业务需求而无法实现。
答案 2 :(得分:0)
我刚刚尝试添加另一个硒功能windowFocus()
:
// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().windowFocus("enquiryPopup");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");
当我在本地运行它时测试成功,但只有所有这些方法调用 - create / focus / wait / select。
我要让构建服务器运行所有测试,如果成功,我将从中创建一个库函数......!
答案 3 :(得分:0)
我需要在弹出窗口中选择一个iframe并填写表单。 我无法使用selectWindow cmd,其中selenium无法找到我的iframe,所以我删除了命令。
这个selenese对我来说效果很好(iframe标题和id = account_frame):
<tr>
<td>click</td>
<td>//a[@class='item_add']</td>
<td></td>
</tr>
<tr>
<td>windowFocus</td>
<td>account_frame</td>
<td></td>
</tr>
<tr>
<td>waitForPopUp</td>
<td>account_frame</td>
<td>10000</td>
</tr>
答案 4 :(得分:-1)
尝试在导致问题的调用周围添加一些等待语句。
之前我遇到过相同的错误,唯一可以可靠解决问题的方法是调用System.Threading.Thread.Sleep(5000)..