说明
当前有一个项目,因为是多个网站之间存在相互的关联(其中一个网站属于管理者,管理其他网站的各种用户信息),因此在编写自动化测试用例的时候,需要同时打开这几个网站,并且可以自由来回切换。由于自动化测试的框架和基础组件以及公共方法是我帮他们做出来的,于是,测试部的同事们把这个任务又交给了我这边。
方案敲定
我提出了两个方案,并且给出了demo(这里先说下方案,后面会给出代码)。
第一个方案:
只有一个页签,每次需要到另一个网站的时候重新输入网址来重定向。
第二个方案:
每次需要打开新的网站的时候,打开一个新的页签,然后输入网址,进入该网站。
使用已打开的网站时,只需要切换回来就可以了。
毫无疑问,第一个方案完全没有考虑的必要,因此,直接采用第二方案。
code
public class TestFunction extends TestConfig {
/**
* TestConfig是我们的测试父单元,所有的before\after都在其中定义
* driver是全局变量,在TestConfig中定义并实例化。
* Utilities为工具类,其中方法均为静态方法。
*/
@Test
public void Test_001() throws Throwable {
//首先,打开一个新的页签
Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
Utilities.delay(1000);
rb.keyPress(KeyEvent.VK_T);
Utilities.delay(1000);
rb.keyRelease(KeyEvent.VK_CONTROL);
Utilities.delay(1000);
rb.keyRelease(KeyEvent.VK_T);
Utilities.delay(1000);
Utilities.delay(5000);
//遍历页签,切换至新打开的页签(管理者页签)
Set<String> handles=driver.getWindowHandles();
for (String handle:handles) {
String title = driver.switchTo().window(handle).getTitle();
System.out.println(driver.switchTo().window(handle).getTitle());
if (null == title || title.equals("")) {
driver.navigate().to("https://www.baidu.com");//请忽略这个网址,涉及信息安全,不能出现真实使用的网址
Utilities.delay(5000);
break;
}
}
/**
* 对该页签的元素做操作(创建新的用户或者修改已有的用户信息)
*/
// 遍历页签,切换至之前已打开的页签(被管理页签)
handles=driver.getWindowHandles();
for (String handle:handles) {
String title = driver.switchTo().window(handle).getTitle();
System.out.println(driver.switchTo().window(handle).getTitle());
if (title.equals("CSDN - 专业开发者社区")) { //请忽略这个title,涉及信息安全,不能出现真实使用的title
driver.navigate();
Utilities.delay(5000);
break;
}
}
Utilities.delay(5000);
/**
* 对该页签的元素做操作(使用新创建的用户登陆)
*/
}
}
后记
由于这个只是一个demo的代码,所以具体的实现还是要融合到测试框架中去,一些可以提取的公共方法还是需要放到工具类或者父单元中去的,这个就不在这里说了。