selenium-java web自动化测试工具

发表于:2018-8-31 14:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:肖哥哥    来源:博客园

分享:
  其中:
  16行谷歌浏览器的驱动下载地址:https://chromedriver.storage.googleapis.com/index.html
  18行火狐浏览器的驱动下载地址:https://github.com/mozilla/geckodriver/releases
  然后运行,你就可以为所欲为了
  案列二:有弹出框及使用了Frame的页面,以百度盘登录为例
  代码如下:
  package com.xiao.selenium;
  import java.util.concurrent.TimeUnit;
  import org.openqa.selenium.By;
  import org.openqa.selenium.Point;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebElement;
  import org.openqa.selenium.firefox.FirefoxDriver;
  /**
  * @Title: com.xiao.selenium.BaiduPanLogin.java
  * @Description:
  * @author changw.xiao@qq.com
  * @date 2018年2月5日 上午9:16:44
  * @version V1.0
  */
  public class BaiduLogin {
  public static void main(String[] args) throws InterruptedException {
  Thread.sleep(3000);
  System.setProperty("webdriver.gecko.driver", "c://geckodriver.exe");
  WebDriver driver = new FirefoxDriver();
  //      driver.manage().window().maximize();
  driver.manage().window().setPosition(new Point(100, 50));
  driver.manage().deleteAllCookies();
  // 与浏览器同步非常重要,必须等待浏览器加载完毕
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  driver.get("https://pan.baidu.com/");
  Thread.sleep(1000);
  WebElement qqLoginLink = driver
  .findElement(By.xpath("/html/body/div[1]/div[3]/div[6]/div/div[4]/div[2]/div/ul/li[2]/a"));
  qqLoginLink.click();
  Thread.sleep(1000);
  // 获取当前页面句柄
  String handle = driver.getWindowHandle();
  // 获取所有页面的句柄,并循环判断不是当前的句柄 然后切换到子窗体
  for (String handles : driver.getWindowHandles()) {
  if (handles.equals(handle))
  continue;
  driver.switchTo().window(handles);
  }
  // 由于登录输入框在frame中,还需要先切换进入frame,否则,也找不到输入框的
  driver.switchTo().frame(driver.findElement(By.xpath("//*[@id='ptlogin_iframe']")));
  // 调试过程中,如果提示找不到元素,不知道是否切换成功了,可以把当前handler的source打印出来看看
  // System.out.println(driver.getPageSource());
  driver.findElement(By.xpath("//*[@id='switcher_plogin']")).click();
  driver.findElement(By.xpath("//*[@id='u']")).sendKeys("317409898");
  driver.findElement(By.xpath("//*[@id='p']")).sendKeys("xxxxxxxxx");
  driver.findElement(By.xpath("//*[@id='login_button']")).click();
  //由于我的账号没绑定手机,点登录后会有个提示,如果直接关闭,可能被判断为还没完成登录,没有会话,所以稍等片刻
  Thread.sleep(2000);
  //关闭弹出的子窗体
  driver.close();
  //driver.navigate() 下有很多方法,比如后退,刷新等
  Thread.sleep(2000);
  }
  }

  注意:1.我这里只开了两个窗口,如果是多个,而且需要在窗口间切换操作的,注意在一个窗口中完成操作后,确认是否切回到需要操作的窗口
  2.页面内部有frame的,除了切换到具体页面外,还要切换到对应的frame中才行
  3.关闭窗口时,也要确认操作的对象
   上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号