selenium 相关api操作

driver.close(); //关闭程序
driver.findElement(By.id("idExpression"));    //查找单个页面元素
driver.findElements(By.xpath("xpathExpression"));//查找一组页面元素
driver.get("网址");    //跳转到指定网址
driver.getClass();    //获取当前操作所属的类
driver.getCurrentUrl(); //获取当前访问的URL地址
driver.getPageSource();    //获取当前访问页面的html源代码
driver.getTitle();    //获取当前访问页面的标题    
driver.getWindowHandle(); //获取当前窗口额句柄
driver.getWindowHandles();
driver.hashCode();    // 获取哈希值
driver.navigate();    // 用来模拟浏览器工具栏上一些按钮的功能
driver.switchTo();

//field,域是一种属性,可以是一个类变量,一个对象变量,一个对象方法变量或者是一个函数的参数。

WebDriver driver = new ChromeDriver();
driver.get("http://www.baidu.com/");
WebElement SerElement= driver.findElement(By.id("kw"));

windows的各个窗口都拥有唯一的标识,那就是句柄,可以说一个页面有唯一的句柄,没有重复的,当webdriver打开一个页面后,那么就出现一个新的句柄
MD5值要是相同的话,那就说明你下载的文件没有被第3方改动过, MD5值要是不同就话,那就说明你下载的文件被第别人改动过了

哈希值常常用来判断两个文件是否相同
哈希值 可以简单理解为一段数据(某个文件或字符串的)DNA,或者身份证,
通过哈希算法(MD5,SHA-1等),将一段较长的数据映射为较短的数据,
这段小数据就是大数据的哈希值.
哈希值是唯一的,只要它对应的数据发送一丁丁的变化,它的哈希值就会发送变化.
另一方面,既然是DNA,那就保证了没有两个数据的哈希值是完全相同的.
正应为这样,所以常用来判断两个文件是否相同.

navigate():用来模拟浏览器工具栏上一些按钮的功能

WebElement相关方法
    1.点击操作
    WebElement button =  driver.findElement(By.id("login"));
    button.click();
    由元素对象调用click()方法;

     2.清除操作
     WebElement username = driver.findElement(By.id("username_input"));
    username.clear();
    调用之后,会把输入框的内容全部清空;

    3.获得元素属性的值
    <input type="text" value="" autocomplete="off" placeholder="用户名" id="u" class="form-control" onblur="checkFailNum()" name="username">
    上面代码是用户名输入框的源码,我们要获取这个"用户名"三个字就需要用到;
    getAttribute(java.lang.String name) 这方法,代码如下:
    WebElement username = driver.findElement(By.id("u"));
    username.getAttribute("placeholder");

    4.获取元素的文本
    WebElement login = driver.findElement(By.id("loginBtn"));
    login.getText();

    5.元素是否显示
    方法有个返回值类型是boolean,也就是说如果元素显示了返回true,如果没有显示返回false;
    WebElement login = driver.findElement(By.id("loginBtn"));
    login.isDisplayed();

    6.元素是否被选择
    WebElement checkbox = driver.findElement(By.id("checkbox_id"));
    checkbox.isSelected();//会有返回值,如果勾选了。返回true,如果没有勾选返回false。

    7.元素是否被启用
    WebElement login = driver.findElement(By.id("loginBtn"));
    login.isEnabled();
    //如果可用返回true,如果不可用返回false

    8.提交操作
    <button class="btn btn-major" id="loginBtn" type="submit">登录</button>
    WebElement login = driver.findElement(By.id("loginBtn"));
    login.submit();

    10.iFrame处理
    有时候我们在定位一个页面元素的时候发现一直定位不了,反复检查自己写的定位器没有任何问题,代码也没有任何问题。
    这时你就要看一下这个页面元素是否在一个iframe中,这可能就是找不到的原因之一。
    如果你在一个default content中查找一个在iframe中的元素,那肯定是找不到的。
    反之你在一个iframe中查找另一个iframe元素或default content中的元素,那必然也定位不到。
    selenium webdriver中提供了进入一个iframe的方法:
    WebDriver org.openqa.selenium.WebDriver.TargetLocator.frame(String nameOrId)

    也提供了一个返回default content的方法:
    WebDriver org.openqa.selenium.WebDriver.TargetLocator.defaultContent()
    driver.switchTo().frame("id");//传入的是iframe的id

    返回上一个iFrame:
    driver.switchTo().defualContent();

    11. 操作下拉选择框
    <select style="75px" onchange="change_prodj()" name="province" id="province">
    <option value="10">A 安徽</option>
    <option value="11">A 澳门</option>
    <option value="12">B 北京</option>
    <option value="43">C 重庆</option>
    <option value="13">F 福建</option>
    <option value="14">G 甘肃</option>
    <option value="15">G 广东</option>
    <option value="16">G 广西</option>
    <option value="17">G 贵州</option>
    <option value="18">H 海南</option>
    <option value="19">H 河北</option>
    <option value="20">H 河南</option>
    <option value="21">H 黑龙江</option>
    </select>
    首先定位到select下拉框
        WebElement element_province = driver.findElement(By.id("xxxx"));
    然后将定位到的element传入select
        Select province = new Select(element_province);
    然后由select来操作下拉框
    province.selectByIndex(0) //根据所选值的位置来选择下拉框值,从0开始
    province.selectByValue("18") //根据value值来选择下拉框的值,比如这里的18,选择的就是海南
    province .selectByVisibleText("北京")//这个是根据可见文本来操作下拉菜单,比如你选的北京,那么就会找到北京作为下拉框的

    12. 处理alert
    获取当前页面弹出的alert
        Alert  a= driver.switchTo().alert();
    获取到alert之后,我们可以通过alert提供的方法来获取alert上的文本,模拟点击alert上的确定按钮,模拟点击alert上的取消按钮等
    获取alert文本方法:    a.gettext();
    模拟点击确定按钮:        a.accept();
    模拟点击取消按钮:        a.dismiss();

    13. 处理浏览器弹出的新窗口
    我们在一个页面上,点击一个链接之后不会在当前页面上打开此链接而是新开一个窗口打开此页面。
    那么我们如何跳转到新开的页面去操作新开的页面呢?selenium也提供了对应的API来处理。
    首先我们需要了解下,每个窗口都是有个句柄的,可以理解为浏览器窗口的标识符。
    我们可以根据这些标识符来确定新开的窗口,具体思路如下:
    首先获得当前句柄:
        String current_handles = driver. getWindowHandle();
    出现新窗口之后,获取所有窗口句柄
        Set<String> all_handles = driver.getWindowHandles();

    循环判断,把当前句柄从所有句柄中移除,剩下的就是你想要的新窗口
    Iterator<String> it = all_handles.iterator();
    while(it.hasNext()){
    if(current_handles == it.next()) continue;
    //跳入新窗口
    WebDriver window = dr.switchTo().window(it.next());
    }
    最后就可以在新窗口的页面进行相关操作了,在新窗口操作的时候使用新driver进行页面操作,新driver是window
    如果想回到最开始的窗口请使用:
    driver.switchTo().window(current_handles)

    14. 执行JS脚本
    有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。
    方法一:
    声明js脚本
    String js ="alert("hello,this is a alert!")";
    执行js脚本
    ((JavascriptExecutor) driver).executeScript(js);
    执行之后会在浏览器上弹出一个alert,显示内容是"hello,this is a alert!"

    核心代码如下:
    WebDriver driver = new FirefoxDriver();
    String js ="alert("hello,this is a alert!")";
    ((JavascriptExecutor) driver).executeScript(js);
    Thread.sleep(2000);
    driver.quit();

    方法二:
    这个方法比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。 
    ((JavascriptExecutor) driver).executeScript(String js, Object args); 
    此方法有两个参数,
    第一个参数是: js脚本,至于js脚本你想写点击的或者输入的脚本都可以,我们这里举例为点击操作。
    第二个参数是:要点击的元素。 
    比如我要点击百度搜索的搜索按钮,可以这样写: 
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", driver.findElement(By.id("su"))); 
    核心代码如下:
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.baidu.com/");
    String js ="arguments[0].click();";
    driver.findElement(By.id("kw")).sendKeys("JAVA");
    WebElement searchButton = driver.findElement(By.id("su"));
    ((JavascriptExecutor) driver).executeScript(js,searchButton);
    Thread.sleep(2000);
    driver.quit();

    15. 等待元素加载
    1.硬性等待(不推荐)
        Thread.sleep(int sleeptime);
    2.智能等待
    public void waitForElementToLoad(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);
           }
    }

    3.设置等待页面加载完毕
        int pageLoadTime = 10;
        driver.manage().timeouts().pageLoadTimeout(pageLoadTime, TimeUnit.SECONDS);


    16. 设置浏览器窗口大小
        窗口最大化    
        driver.manage().window().maximize();
        指定设置窗口大小
        Dimension d = new Dimension
        driver.manage().window().setSize(d);
        指定窗口在屏幕中出现位置
        Point p = new Point(500, 300);
        driver.manage().window().setPosition(p);

本博客后部分内容转载自jdango, 感谢jdango博主的分享, 

原文地址:https://www.cnblogs.com/xiaofeifei-wang/p/6740410.html