selenium---多表单切换

2019-06-14  本文已影响0人  小胖5920

1、frame切换
针对frame嵌套内的页面上元素,可以通过switch_to_frame()方法切换
//为了切换到frame
WebElement frame =webDriver.findElement(By.xpath("//*[@id="pf-page"]/div/div[2]/div[1]/div/iframe"));
webDriver.switchTo().frame(frame);

//切换回frame
webDriver.switchTo().defaultContent();

2、多窗口切换
以下代码是一个多窗口切换的例子,目前也是没咋看明白的 先写出来,方便以后查看研究或者使用
目前只可以进行两个窗口进行切换,首先记录下当前窗口的句柄(我也不知道句柄是啥意思),然后在打开一个页面,获取所有的句柄,用所有的句柄进行判断,如果和第一个句柄不相等的话,就切换到进行到第二个句柄中;切换回第一个句柄,还是进行判断,如果全部句柄中等于第一个句柄,就切换句柄;大概就是这个意思吧

getWindowHandle() 获取当前窗口句柄
getWindowHandles() 返回所有窗口的句柄
switchTo().window() 切换不同的句柄

public class baidu {
public static void main(String[] args) throws InterruptedException {
System.out.println("开始执行代码");
System.setProperty("webdriver.chrome.driver", "C:\app\chromedriver_win32\chromedriver.exe");
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://www.baidu.com");
Thread.sleep(3000);
String handle = webDriver.getWindowHandle();
System.out.println(handle);
webDriver.findElement(By.linkText("登录")).click();;
Thread.sleep(3000);
webDriver.findElement(By.linkText("立即注册")).click();;
Set<String> handles = webDriver.getWindowHandles();
for(String handle1 :handles) {
if(handle1.equals(handle)==false) {
webDriver.switchTo().window(handle1);
System.out.println("现在是注册页面了");
Thread.sleep(3000);
webDriver.findElement(By.name("userName")).clear();
webDriver.findElement(By.name("userName")).sendKeys("nameuser");
// webDriver.findElement(By.name("account")).sendKeys("password");
Thread.sleep(3000);
webDriver.close();
}
}
//判断是否为百度首页,并操作首页上的元素
for(String handle2 : handles) {
if(handle2.equals(handle)) {

            webDriver.switchTo().window(handle2);
            Thread.sleep(3000);
            webDriver.findElement(By.className("close-btn")).click();
            System.out.println("是百度首页了");
            webDriver.findElement(By.id("kw")).sendKeys("webdriver使用方法");
            Thread.sleep(3000);
        }
    }
    Thread.sleep(3000);
    webDriver.close();
    System.out.println("写完了哈");
}

}

上一篇 下一篇

猜你喜欢

热点阅读