美文网首页
Selenium Webdriver 常用api

Selenium Webdriver 常用api

作者: hxhdip | 来源:发表于2018-12-09 16:53 被阅读0次

    1.浏览器操作

    -设置大小
    driver.manage().window().setSize(new Dimension(1280,800));设置浏览器分辨率为:1280x500

    • 最大化浏览器
        driver.manage().window().maximize();

    • 关闭浏览器 
      driver.close(); //关闭当前的窗口
      driver.quit();//关闭所有的window
      tip:可以用 driver.window_handles 查看window handle

    • 打开测试页面

    driver.get("http://www.google.com");
    driver.navigate().to("http://www.baidu.com/"); 
    
    //navigate前进后退,刷新
    driver.navigate().forward();
    driver.navigate().back();
    driver.navigate().refresh();
    

    navigate方法会产生1个Navigator对象,其封装了与导航相关的一些方法,比如前进后退等 navigate()进行页面跳转时不会进行页面数据的校验(比如当前页面有必填项但是实际上没填,navigate也会跳到to页面),相反get()则可以进行这些校验,更真实的模拟实际情况

    2.页面元素定位

    Webdriver提供下面两种方法来定位页面元素,
    参数是By对象,最常用是By.id和By.name查找。
    findElement 定位某个元素,如果没有找到元素会抛出异常:NoSuchElementException
    findElements 定位一组元素

    例如需要定位如下元素:
    <input class="inputClass" type="text" name="user" id="userId" />

    By.id:
          WebElement element = driver.findElement(By.id("userId"));
    
    By.name:
          WebElement element = driver.findElement(By.name("user"));
    
    By.xpath:
          WebElement element =driver.findElement(By.xpath("//input[@id='userId']")); 
    
    By.className
          WebElement element = driver.findElement(By.className("inputClass"));
    
    By.cssSelector
          WebElement element = driver.findElement(By.cssSelector(".input_class"));
    
    By.linkText:
          //通俗点就是精确查询
          driver.get("http://www.baidu.com/"); 
          WebElement element = driver.findElement(By.linkText("百科"));
    
    By.partialLinkText:
          //这个方法就是模糊查询
          driver.get("http://www.baidu.com/"); 
          WebElement element = driver.findElement(By.partialLinkText("hao"));
    
    By.tagName:
          driver.get("http://www.baidu.com/");  
          String test= driver.findElement(By.tagName("form")).getAttribute("name");
          System.out.println(test); 
    

    小技巧:当使用某一属性识别元素时如果返回了多个,可通过先找到唯一的父元素,然后再找他的子元素,如下:
    WebElement web=driver.findElement(By.id("form")).findElement(By.id("kw"));

    另外通常可以使用xpath来定位元素,能解决大部分HTML元素定位问题。

    3.对页面元素进行操作

    • 输入框(text field or textarea)
    WebElement element = driver.findElement(By.id("useeId"));
    element.sendKeys(“test”);//在输入框中输入内容:
    element.clear();       //将输入框清空
    element.getText();     //获取输入框的文本内容: 
    
    • 下拉选择框(Select)

    选择
    select_by_index(index) ——通过选项的顺序,第一个为 0
    select_by_value(value) ——通过value属性
    select_by_visible_text(text) ——通过选项可见文本

    取消
    deselect_by_index(index)
    deselect_by_value(value)
    deselect_by_visible_text(text)
    deselect_all()

    selenuim页提供了三种属性,提供必要的信息
    options ——提供所有的选项的列表,其中都是选项的WebElement元素
    all_selected_options ——提供所有被选中的选项的列表,其中也均为选项的WebElement元素
    first_selected_option ——提供第一个被选中的选项,也是下拉框的默认值


    //示例
    Select select = new Select(driver.findElement(By.id("citySelect")));  
    select.selectByVisibleText(“杭州”);
    select.selectByValue(“330100”); 
    select.deselectAll();
    select.deselectByValue(“330100”);
    select.deselectByVisibleText(“杭州”);
    select.getAllSelectedOptions();
    select.getFirstSelectedOption(); 
    
    • 单选项(Radio Button)
      WebElement radio=driver.findElement(By.id("sexMode"));

    radio.click();     //选择某个单选项
    radio.clear();     //清空某个单选项
    radio.isSelected();  //判断某个单选项是否已经被选择

    • 多选项(checkbox)

    WebElement checkbox = driver.findElement(By.id("myCheckbox."));

    checkbox.click();
    checkbox.clear();
    checkbox.isSelected();
    checkbox.isEnabled();

    • 按钮(button)
      WebElement btn= driver.findElement(By.id("save"));

    btn.click();      //点击按钮
    btn.isEnabled ();  //判断按钮是否enable

    • 弹出对话框(Popup dialogs Alert)
      Alert alert = driver.switchTo().alert();

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

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

    approve.click();//单纯的点击
    approve.submit();//只适合于表单的提交,涉及到前后台数据交互

    • 上传文件
      上传文件的元素操作:
      WebElement adFileUpload =driver.findElement(By.id("WAP-upload"));

    String filePath = "C:\test\uploadfile\media_ads\test.jpg";
    FileUpload.sendKeys(filePath);

    • Windows 和 Frames之间的切换

    driver.switchTo().defaultContent();     //返回到最顶层的frame/iframe
    driver.switchTo().frame("leftFrame");    //切换到某个frame:
    driver.switchTo().window("windowName"); //切换到某个window

    • 调用Java Script
      Web driver对Java Script的调用是通过JavascriptExecutor来实现的,例如:

    JavascriptExecutor js = (JavascriptExecutor) driver;
    js.executeScript("JS脚本");

    -超时设置

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);      //识别元素时的超时时间,影响范围:全局。(慎用)
    driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);  //页面加载时的超时时间
    driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);  //异步脚本的超时时间
    

    其他使用

    -截图

    WebDriver driver = new FirefoxDriver();
    driver.get("[http://www.baidu.com](http://www.baidu.com/)");
    File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); //图片以文件的形式返回
    
    • 改变user agent
      User Agent的设置是平时使用得比较多的操作:
    FirefoxProfile profile = new FirefoxProfile();
    
    profile.addAdditionalPreference("general.useragent.override","some UA string");
    WebDriver driver = new FirefoxDriver(profile);
    
    • 读取Cookies

    增加cookie:

    // 增加
    
    Cookie cookie = new Cookie("key", "value");
    
    driver.manage().addCookie(cookie);
    

    获取cookie的值:

    // 输出cookie
    
    Set<Cookie> allCookies = driver.manage().getCookies();
    
    for (Cookie loadedCookie : allCookies) {
       System.out.println(String.format("%s -> %s",loadedCookie.getName(), loadedCookie.getValue()));
    
    }
    

    根据某个cookie的name获取cookie的值:

    driver.manage().getCookieNamed("mmsid");
    

    删除cookie:

    // 有三种删除方式
    
    // By name
    driver.manage().deleteCookieNamed("CookieName");
    
    // By Cookie
    driver.manage().deleteCookie(loadedCookie);
    
    // 删除所有
    driver.manage().deleteAllCookies();
    

    相关文章

      网友评论

          本文标题:Selenium Webdriver 常用api

          本文链接:https://www.haomeiwen.com/subject/gdqkhqtx.html