Java selenium相关操作API

一、下拉框相关操作

  1. select标签下拉框

  (1)样式

  

 (2)定位方法:使用select类操作下拉选择框

 1 //定位下拉框菜单
 2 WebElement selector = driver.findElement(By.id("type"));
 3 //实例化select对象,将普通元素转换为下拉框控件
 4 Select select = new Select(selector);
 5         
 6 //通过选项的索引定位
 7 select.selectByIndex(0);
 8 //通过选项的value属性值进行定位
 9 select.selectByValue("sprint");
10 //通过文本进行选择
11 select.selectByVisibleText("短期项目");            

2. 非select标签,由li标签组成

 (1)样式

 

   (2)定位方法:通过点击下拉菜单的按钮,激活下拉菜单后,在进行元素定位

1 //点击下拉框菜单
2 driver.findElement(By.xpath("//div[@id='select2_container']/ul")).click(); 
3 //点击下拉选项
4 driver.findElement(By.id("li2_input_2")).click(); 

二、切换页面相关操作

  1. 页面切换iframe

   

   (1)直接使用id切换:driver.switchTo().frame(“f3”);

     (2)使用WebElement对象切换:driver.switchTo().frame(driver.findElement(By.id("f3")));

     (3)  使用<iframe>标签的位置数量切换。0代表该页面的第一个<iframe>标签,以此类推:driver.switchTo().frame(0);

    切换至对应的iframe则可对元素进行操作

   (4)操作完成后若需要切换回原窗口,使用:driver.switchTo().defaultContent();

  2. 窗口之间的切换(适用于打开新标签)

 1 //获得当前窗口句柄
 2  String search_handle = driver.getWindowHandle();
 3 
 4 //获得所有窗口句柄
 5 Set<String> handles = driver.getWindowHandles();
 6 
 7 //判断是否为新窗口
 8 for(String handle : handles){
 9    if (handle.equals(search_handle)==false){
10     //切换到新窗口
11     driver.switchTo().window(handle);
12    }
13   }

 三、JS操作元素

  1. Webdriver对Java Script的调用是通过JavascriptExecutor来实现的

//1.创建JavascriptExecutor对象,用于执行JS,此对象由driver进行强制类型转换而来
JavascriptExecutor js = (JavascriptExecutor) driver;
        
//2.使用JavascriptExecutor对象调用executeScript方法来执行JS语句,这段JS语句以字符串的形式传递给executeScript
js.executeScript("alert('hellowWorld!')"); //弹窗提示hellowWorld

  2. 更改页面属性,使隐藏元素显示

  

//1.创建JavascriptExecutor对象,用于执行JS,此对象由driver进行强制类型转换而来
JavascriptExecutor jse = (JavascriptExecutor) driver;
        
//2.使用JavascriptExecutor对象调用executeScript方法来执行JS语句,使隐藏元素显示
jse.executeScript("document.getElementById('PO').style.display='block'");

   

  3. 移动某元素的顶部与浏览器齐平

WebElement element = driver.findElement(By.xpath("//span[text()='指派给我']"));
JavascriptExecutor js=(JavascriptExecutor) driver; 
js.executeScript("arguments[0].scrollIntoView();", element);

  4. 移动某元素的底部与浏览器齐平

   ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(false);", element);

四、上传文件

  1、sendkeys方法,只适用于上传文件的前端代码是input标签

     driver.findElement(By.xpath("//*/div[@class='soutu-btn']")).sendKeys("D:\图片2.jpg");

  2、利用Robot类处理文件上传。其大致流程可以为:

     1)利用selenium点击web上本地文件的上传按钮;
     2)在弹出的弹框中,文件路径输入框默认的是光标的聚焦,将文件在磁盘上的路径通过拷贝和黏贴的方法写上去。
     3)通过按下回车,默认触发弹框的确定按钮,完成文件上传的功能。

 1 package first;
 2 
 3 import java.awt.Robot;
 4 import java.awt.Toolkit;
 5 import java.awt.datatransfer.StringSelection;
 6 import java.awt.event.KeyEvent;
 7 import java.util.concurrent.TimeUnit;
 8 import org.openqa.selenium.By;
 9 import org.openqa.selenium.WebDriver;
10 import org.openqa.selenium.firefox.FirefoxDriver;
11 
12 public class shangchuang {
13 
14     public static void main(String[] args) throws Exception {
15 
16         WebDriver driver = new FirefoxDriver();
17         driver.manage().window().maximize();
18         driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);
19         driver.get("https://www.baidu.com");
20 
21         // 获取当前项目的路径
22         String path = System.getProperty("user.dir");
23 
24         // 指定图片路径
25         StringSelection selection = new StringSelection(path + "\src\com\test\upload\upload.html");
26 
27         // 把图片路径复制到剪切板
28         Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);
29 
30         // 点击照相机这个工具
31         driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();
32 
33         // 点击本地上传图片
34         driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();
35 
36         // 新建一个Robot类的对象
37         Robot robot = new Robot();
38         Thread.sleep(1000);
39 
40         // 按下Ctrl+V
41         robot.keyPress(KeyEvent.VK_CONTROL);
42         robot.keyPress(KeyEvent.VK_V);
43 
44         // 释放Ctrl+V
45         robot.keyRelease(KeyEvent.VK_CONTROL);
46         robot.keyRelease(KeyEvent.VK_V);
47         Thread.sleep(2000);
48 
49         // 点击回车
50         robot.keyPress(KeyEvent.VK_ENTER);
51         robot.keyRelease(KeyEvent.VK_ENTER);
52     }
53 }
View Code
原文地址:https://www.cnblogs.com/zhufeng123/p/13799147.html