Selenium 自动化测试框架

定位元素

Selenium 定位网页元素主要是通过元素的属性值或者元素在HTML里的路径位置,定位方式一共有8种:

定位方式代码示例
id属性driver.findElement(By.id())
name属性driver.findElement(By.name())
classname属性driver.findElement(By.className())
链接内容driver.findElenment(By.linkText())
标签名称driver.findElement(By.tagName())
链接的部分内容driver.findElement(By.partialLinkText())
css表达式driver.findElenment(By.cssSelector())
xpath表达式driver.findElenment(By.xpath())
  1. id 和 name 在一个页面往往是唯一的所以他们的定位准确度较高。
  2. classname 和 tagname 一般是被很多个元素使用,如果要定位单一元素的话慎用(毕竟你也很难看出来你需要的元素是不是第一个)。

上面的定位方法只能定位一个元素,如果要定位多个元素的时候,就需要换一下方式了:也就是在 element 后面加个 s 就好了

操控元素

Selenium 操控元素必须要定位后才能执行,理论上Selenium可以模拟任何操作,比如: 单击、右击、滑动、滚动、复制粘贴、文本输入等。操作方式分为三大类:常规操作、鼠标事件操作、键盘事件操作。

常规操作

常规操作包括文本清除、文本输入、单击元素、提交表单、获取元素值等,以百度首页为例(https://www.baidu.com/)具体使用方法入下:

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    //定位输入框,并且输入火锅
    driver.findElement(By.id("kw")).sendKeys("火锅");
    Thread.sleep(2000);
    //定位到 ‘百度一下’ 并单击
    driver.findElement(By.id("su")).click();
    Thread.sleep(3000);
    //定位到 火锅 贴吧
    driver.findElement(By.cssSelector("#s_tab > div > a.s-tab-item.s-tab-item_1CwH-.s-tab-tieba_3gnzZ.s-tab-tieba")).click();
    //获取文本
    String text = driver.findElement(By.cssSelector("#pagelet_frs-header\\/pagelet\\/head > div > div.head_content > div.card_top_wrap.clearfix.card_top_theme > div.card_top.clearfix > p")).getText();
    System.out.println(text);
    //隐式等待,等待超过三秒就抛出异常
    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
    //清除输入框
    driver.findElement(By.id("wd1")).clear();
    Thread.sleep(3000);
    driver.quit();
}

其他操作

比如获取属性值这些:

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    //获取属性值
    String value = driver.findElement(By.cssSelector("#su")).getAttribute("value");
    System.out.println(value);
    Thread.sleep(3000);
    //获取元素在页面当中的坐标位置
    Point location = driver.findElement(By.cssSelector("#su")).getLocation();
    System.out.println(location);
    Thread.sleep(3000);
    //判断元素在页面是否可见
    boolean display = driver.findElement(By.cssSelector("#su")).isDisplayed();
    System.out.println(display);
    //判断元素是否被选,一般用于checkbox和radio
    boolean select = driver.findElement(By.cssSelector("#su")).isSelected();
    driver.quit();
}

浏览器操作

窗口的切换

通过 getWindowHandle() 获取窗口的句柄,然后通过 switchTo() 来完成跳转。

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    //获取当前页面的句柄
    String curwindow1 = driver.getWindowHandle();
    driver.findElement(By.cssSelector("#s-top-left > a:nth-child(1)")).click();
    //获取当前页面的句柄
    String curwindow2 = driver.getWindowHandle();
    //获取所有页面的句柄
    Set<String> allwindow = driver.getWindowHandles();
    for (String window:allwindow) {
        if (window != curwindow1) {
            //跳转到该句柄(页面)
            driver.switchTo().window(window);
        }
    }
    String curUrl = driver.getCurrentUrl();
    System.out.println(curUrl);
    driver.quit();
}

窗口的大小

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    //窗口最大化
    driver.manage().window().maximize();
    Thread.sleep(3000);
    //最小化
    driver.manage().window().minimize();
    Thread.sleep(3000);
    //自己设置大小
    driver.manage().window().setSize(new Dimension(800, 600));
    Thread.sleep(3000);
    driver.quit();
}

滚动条滚动

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    driver.findElement(By.id("kw")).sendKeys("火锅");
    driver.findElement(By.id("su")).click();
    //先置底
    driver.executeScript("window.scroll(0,document.body.scrollHeight)");
    Thread.sleep(3000);
    //置顶
    driver.executeScript("window.scroll(0,document.body.scrollTop)");
    Thread.sleep(3000);
    driver.quit();
}

浏览器前进后退

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    driver.findElement(By.id("kw")).sendKeys("火锅");
    driver.findElement(By.id("su")).click();
    Thread.sleep(3000);
    //后退
    driver.navigate().back();
    Thread.sleep(3000);
    //前进
    driver.navigate().forward();
    Thread.sleep(3000);
    driver.quit();
}

下拉框

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //定位select标签下拉框
    WebElement ele=driver.findElement(By.cssSelector("X"));
    //实例化select方法
    Select select=new Select(ele);
    //通过select索引定位选择下拉框元素,注意索引从0开始
    select.selectByIndex(1);
    Thread.sleep(2000);
    // 通过select的value定位选择下拉框元素
    select.selectByValue("03");
    Thread.sleep(2000);
    // 通过select的文本内容定位选择下拉框元素
    select.selectByVisibleText("text");
    Thread.sleep(2000);
    driver.quit();
}

屏幕截图

public void test1() throws InterruptedException, IOException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    driver.findElement(By.cssSelector("#kw")).sendKeys("火锅");
    driver.findElement(By.cssSelector("#su")).click();
    //屏幕截图
    Thread.sleep(3000);
    File srcfile = driver.getScreenshotAs(OutputType.FILE);
    //把截图保存在指定路径下
    File filename = new File("./src/test/autoPic/test.png");
    FileUtils.copyFile(srcfile,filename);
    Thread.sleep(3000);
    driver.quit();
}

鼠标事件

鼠标事件操作需要Selenium的ActionChains类来实现,ActionChains中有很多鼠标操作方法,下面就列举一些常用的方法:

作用代码
模拟鼠标双击doubleClick().perform()
模拟鼠标单击click().perform()
移动鼠标到某元素的中间位置moveToElement().perform()
模拟鼠标右击动作contextClick().perform()
将元素拖拽到目标位置dragAndDrop(source,target).perform()
按住某个元素actions.clickAndHold().perform()

键盘事件

selenium 中的 org.openqa.selenium.Keys 类提供了键盘上几乎所有按键的方法。 sendKeys() 方法可以用来模拟键盘输入,可以用它来输入键盘上的按键, 组合键。

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    WebElement element = driver.findElement(By.cssSelector("#kw"));
    //输入框输入内容
    element.sendKeys("火锅");
    Thread.sleep(2000);
    //删除最后一个文字
    element.sendKeys(Keys.BACK_SPACE);
    Thread.sleep(2000);
    //输入空格键
    element.sendKeys(Keys.SPACE);
    Thread.sleep(2000);
    //ctrl+a 全选输入框内容
    element.sendKeys(Keys.CONTROL, "a");
    Thread.sleep(2000);
    //通过回车键盘来代替点击操作
    element.sendKeys(Keys.ENTER);
    Thread.sleep(2000);
    //F5按键刷新页面
    Actions action=new Actions(driver);
    action.sendKeys(Keys.F5);
    Thread.sleep(3000);
    driver.quit();
}

上传文件

public void test1() throws InterruptedException {
    ChromeDriver driver = new ChromeDriver();
    //进入百度网站
    driver.get("https://www.baidu.com");
    driver.findElement(By.xpath("//span[@class='soutu-btn']")).click();
    //上传按钮为input标签,定位上传按钮
    WebElement element = driver.findElement(By.xpath("//input[@class='upload-pic']"));
    Thread.sleep(2000);
    //输入文件路径,上传文件
    element.sendKeys("D:\\download\\test.jpg");
    Thread.sleep(3000);
    driver.quit();
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lockey-s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值