selenium API

1、对浏览器操作

1.1用webdriver打开浏览器

//打开firefox浏览器
System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
WebDriver dr = new FirefoxDriver();

//打开chrome浏览器
//设置chrome路径
System.setProperty("webdriver.chrome.driver","D:\\browser\\APP\\chrome\\chromedriver.exe");
//创建一个Chrome的浏览器实例
WebDriver driver = new ChromeDriver();

1.2最大化浏览器&关闭浏览器

WebDriver driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.close();
driver.quit();

1.3设置浏览器窗口大小

dr.manage().window().setSize(new Dimension(320, 240));

1.4打开测试页面

driver.get("http://www.baidu.com/");
driver.navigate().to("http://www.baidu.com/");
//navigate方法会产生1个Navigator对象,其封装了与导航相关的一些方法,比如前进后退等

2、页面元素定位

Webdriver提供下面两种方法来定位页面元素,参数是By对象,最常用的是By.id和By.name

<input class="input_class" type="text" name="passwd" id="passwd-id">
//通过元素id
WrbElement elemenet = driver.findElement(By.id("passwd-id"));
//通过name
WebElement element = driver.findElement(By.name("passwd"));
//By.xpath
WebElement element =driver.findElement(By.xpath("//input[@id='passwd-id']")); 
//By.className
WebElement element = driver.findElement(By.className("input_class"));
//By.cssSelector
WebElement element = driver.findElement(By.cssSelector(".input_class"));
//By.linkText
//通俗点就是精确查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/"); 
WebElement element = driver.findElement(By.linkText("百科"));
//By.partialLinkText:
//这个方法就是模糊查询
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/"); 
WebElement element = driver.findElement(By.partialLinkText("hao"));
//By.tagName
WebDriver driver = new FirefoxDriver();
driver.get("http://www.baidu.com/"); 
String test= driver.findElement(By.tagName("form")).getAttribute("name");
System.out.println(test);

3、如何对页面元素进行操作

3.1输入框(text field or textarea)

WebElement element = driver.findElement(By.id("passwd-id"));
element.sendKeys(“test”);//在输入框中输入内容:
element.clear();       //将输入框清空
element.getText();     //获取输入框的文本内容:
3.2下拉选择框(select)
Select select = new Select(driver.findElement(By.id("select")));  
select.selectByVisibleText(“A”);
select.selectByValue(“1”); 
select.deselectAll();
select.deselectByValue(“1”);
select.deselectByVisibleText(“A”);
select.getAllSelectedOptions();
select.getFirstSelectedOption(); 

3.3单选项(radio button)

WebElement radio=driver.findElement(By.id("BookMode"));
radio.click();       //选择某个单选项
radio.clear();      //清空某个单选项
radio.isSelected();  //判断某个单选项是否已经被选择

3.4多选框(checkbox)

WebElement checkbox = driver.findElement(By.id("myCheckbox."));
checkbox.click();
checkbox.clear();
checkbox.isSelected();
checkbox.isEnabled();

3.5按钮(button)

WebElement btn= driver.findElement(By.id("save"));
btn.click();      //点击按钮
btn.isEnabled ();  //判断按钮是否enable

3.6处理Alert

Alert alert = driver.switchTo().alert();
alert.accept();  //确定
alert.dismiss();  //取消
alert.getText(); //获取文本

3.7上传文件

3.7.1元素标签是Input时上传方式

Upload.html文件内容如下:

<body>
<input type="file" id="fileControl" value="选择文件"/>
</body>
代码如下:
private static void uploadTest1(WebDriver driver) throws InterruptedException {
   //打开上传的网页 - get中输入upload的地址
   driver.get("D:\\DownLoad\\UploadTest\\upload.html");
   WebElement e1 = driver.findElement(By.id("fileControl"));
   Thread.sleep(2000);
   //输入要上传文件的地址
   e1.sendKeys("D:\\DownLoad\\UploadTest\\被上传的文件.txt");
   Thread.sleep(2000);
}

3.8selenium处理HTML5

3.8.1处理vedio

    private static void html5VedioTest(WebDriver driver)
            throws InterruptedException {
        driver.get("http://videojs.com/");
        Thread.sleep(2000);
        //找到vedio元素
        WebElement vedio = driver.findElement(By.id("preview-player_html5_api"));
        //声明js执行器
        JavascriptExecutor js = (JavascriptExecutor) driver;
        //对vedio这个元素执行播放操作 
        js.executeScript("arguments[0].play()", vedio);
        //为了观察效果暂停5秒
        Thread.sleep(5000);
        //对vedio这个元素执行暂停操作
        js.executeScript("arguments[0].pause()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
        //对vedio这个元素执行播放操作 
        js.executeScript("arguments[0].play()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
        //对vedio这个元素执行重新加载视频的操作
        js.executeScript("arguments[0].load()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
    }

3.8.2处理canvas

    private static void Html5CanvasTest(WebDriver driver)
            throws InterruptedException {
        driver.get("http://literallycanvas.com/");
        Thread.sleep(2000);
        //找到canvas元素
        WebElement canvas = driver.findElement(By.xpath("//*[@id='literally-canvas']//canvas[1]"));
        //声明一个操作类
        Actions drawPen = new Actions(driver);
        //点击并保持不放鼠标 ,按照给定的坐标点移动
        drawPen.clickAndHold(canvas).moveByOffset(20, 100).moveByOffset(100, 20).moveByOffset(-20, -100).moveByOffset(-100, -20).release().perform();
        Thread.sleep(2000);
    }

3.11表单(Form)

//Form中的元素的操作和其它的元素操作一样,对元素操作完成后对表单的提交可以:
WebElement approve = driver.findElement(By.id("approve"));
approve.click();
//或
approve.submit();//只适合于表单的提交

4、其他

4.1等待元素加载

超时设置

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);      //识别元素时的超时时间
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  //页面加载时的超时时间
driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);  //异步脚本的超时时间

硬性等待 thread.sleep(int sleeptime)

智能等待

设置等待页面加载完毕

    private static void waitElementTest(WebDriver driver) {
        //设置等待页面完全加载的时间是10秒,如果在10秒内加载完毕,剩余时间不在等待
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        driver.get("https://www.baidu.com/");
        By inputBox = By.id("kw");
        By searchButton = By.id("su");
        //智能等待元素加载出来
        intelligentWait(driver, 10, inputBox);
        //智能等待元素加载出来
        intelligentWait(driver, 10, searchButton);
        //输入内容
        driver.findElement(inputBox).sendKeys("JAVA");
        //点击查询
        driver.findElement(searchButton).click();
    }
    
    
    public static void intelligentWait(WebDriver driver,int timeOut, final By by){        
        try {
            (new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {

                public Boolean apply(WebDriver driver) {
                    WebElement element = driver.findElement(by);
                    return element.isDisplayed();
                }
            });
        } catch (TimeoutException e) {
            Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + by + "]",e);
        }
    }

4.2模拟键盘操作

有时候有些元素不便点击或做其他的操作,这个时候可以借助selenium提供的Actions类,它可以模拟鼠标和键盘的一些操作,比如点击鼠标右键,左键,移动鼠标等操作。对于这些操作,使用perform()方法进行执行。

    private static void actionsTest(WebDriver driver)
            throws InterruptedException {
        // 设置等待页面完全加载的时间是10秒,如果在10秒内加载完毕,剩余时间不在等待
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        driver.get("https://www.baidu.com/");
        By inputBox = By.id("kw");
        By searchButton = By.id("su");
        // 智能等待元素加载出来
        intelligentWait(driver, 10, inputBox);
        // 智能等待元素加载出来
        intelligentWait(driver, 10, searchButton);
        // 实例化action对象
        Actions action = new Actions(driver);
        // 通过action模拟键盘输入java关键字到 输入框,只有使用了perform方法才会输入进去
        action.sendKeys(driver.findElement(searchButton), "java").perform();
        // 鼠标模拟移动到搜索按钮
        action.moveToElement(driver.findElement(searchButton)).perform();
        // 模拟点击操作
        action.click().perform();
        Thread.sleep(2000);
    }












猜你喜欢

转载自blog.csdn.net/heye13/article/details/79627229