• 元素定位   
             findElement() 方法返回一个元素, 如果没有找到,会抛出一个异常 NoElementFindException()
             findElements()方法返回多个元素, 如果没有找到,会返回空数组, 不会抛出异常。
             语法:WebElement element = driver.findElement(By.XXXX("XXXX")); 
以下为定位方式:by.后面的
id,name,className,tagName,linkText("链接的全部文字"),partialLinkText("链接的部分文字"),cssSelector(“css表达式”),xpath("//input[@id='XXXX']")
xpath地址常见语法(详细内容见另笔记)://XXXX[@XX='XXXX']     或    //XXXX[contains,(@XXXX,'XXXX')]        或       //*[@id='list']/li[1]/div[2]/span[1]    
 
  • 页面操作
             driver.navigate().back();                 //回到上一页
             driver.navigate().forward();            //跳转下一页          
             driver.getTitle();                            // 获取当前页面的标题
             driver.getCurrentUrl();                   // 获取当前页面的url
 
  • 元素常规操作
             WebElement.click();   
             WebElement.clear();                                     //清空     
             WebElement.sendKeys("掘金网");         //输入文本
             WebElement.sendKeys("c:\shao.png");        
             WebElement.getText();
 
  • 判断相关方法
             WebElement.isEnabled()                              //是否可点击
             WebElement.isSelected();                            //是否选中
      WebElement.isDisplayed()        //是否显示
 
  • 鼠标操作 
         需要先实例化一个Actions,且每次点击都必须添加perform(翻译:执行)
            Actions action = new Actions(driver);
            action.click().perform();                                                  //鼠标左击 
            action.contextClick().perform();                                     //鼠标右击
            action.doubleClick().perform();                                      //鼠标双击
            action.moveToElement(WebElement XX).perform();    //鼠标悬停
     // 鼠标拖动实现
            driver.findElement(By.xpath("//*[@id='tbPic']")).click();
            WebElement begin = driver.findElement(By.xpath("//*[@id='list']/li[1]/div[2]/span[1]"));
            WebElement end = driver.findElement(By.xpath("//*[@id='list']/li[2]/div[2]/span[1]"));
            action .dragAndDrop(begin, end).perform();
     action .dragAndDropBy(WebElement element, int x, int y).perform();   //将element元素水平拖动x,垂直拖动y像素
 
  • 点选框及下拉列表框操作
     //单选框
             WebElement radio=driver.findElement(By.id("XXXXX"));
             radio.isSelected();                  //判断某个单选项是否被选中            
             radio.click();                            //选择某个选项
             radio.clear();                           //清空选项
     //复选框
             WebElement checkbox = driver.findElement(By.id("XXXXX"));
             checkbox.isSelected();//是否选中
             checkbox.click();
     //下拉框选择
             Select select = new Select(driver.findElement(By.id("frequency")));
             select.selectByValue("1");
             driver.findElement(By.id("validDays")).click();
 
  • 弹框警告处理
             Alert alert = driver.switchTo().alert();
             alert.accept();                                      //确定
             alert.dismiss();                                     //取消
 
  • iframe中元素定位方法:先定位iframe,用switchTo().frame(XXXXX)切换再定位其他元素
             WebElement iframeElement = driver.findElement(By.xpath("//iframe[contains(@id,'x-URS-iframe')]"));
             driver.switchTo().frame(iframeElement);
       //要操作原页面元素,需要切回
             driver.switchTo().defaultContent();                     //回到默认的页面
             driver.switchTo().parentFrame();                         //切回父级框             
 
  • 弹出页面切换操作(如多个页面间切换)
             getWindowHandle(); 与 getWindowHandles();
    //举例说明
     public void windowshandle() {
            windowsHandle = driver.getWindowHandle();                             //获取当前页面handle
            Set<String> handles = driver.getWindowHandles();                     //获取浏览器所有页面handle
            for(String s : handles) {                                                                   //JDK1.5 for循环新写法,简洁效率
                    if(s.equals(windowsHandle)) {
                            continue; //遍历,如果handles中的一个handle等于当前页面handle,说明没切换页面,跳出本次循环,继续下次循环
                    }
                    System.out.println(s);
                    driver.switchTo().window(s);
           }
           driver.findElement(By.linkText("案例")).click();
    }
 
  • 元素等待
    //分3种等待:
  1. 强制等待,休眠线程(死等):Thread.sleep(2000);   //等待2s
  2. 隐式等待: 如果在规定的时间,找到了元素就继续操作,否则就报错(#条件满足,还是会继续等待完时间)
    * 语法: driver.manage().timeouts().implicitlyWait(timeout, TimeUnit.SECONDS);
    * (第一个参数将接受时间作为整数值,例如10(共等待10s),第二个参数将接受时间测量)
    * 应用场景:全局,例如所有元素在10s没出现都抛出异常
  3. 显示等待:如果在规定的时间内,满足条件就继续操作,否则就报错(#条件满足就操作,不继续等待)
    * 使用前先实例化: WebDriverWait wait = new WebDriverWait(driver,timeout);
    * (第一个参数为WebDriver对象,第二个参数为整数时间,例如10(共等10s))
    * 语法:(ExpectedConditions类中方法)wait.until(ExpectedConditions.XXXX);
     ExpectedConditions方法:
         .elementSelectionStateToBe()
                   例如://判断某个元素的选中状态是否符合预期
                        ExpectedConditions.elementSelectionStateToBe(By.xpath("//*[@id='kw']"), true);
                            //判断某个元素(已定位)的选中状态是否符合预期
                        ExpectedConditions.elementSelectionStateToBe(driver.findElement(By.xpath("//*[@id='kw']")), false);
 
         .elementToBeSelected()
                   例如://判断某个元素是否被选中,一般用在下拉列表
                        ExpectedConditions.elementToBeSelected(By.xpath("//*[@id='kw']"));
 
         .frameToBeAvaliableAndSwitchToIt()
                   例如://判断该表单是否可以切过去,可以就切过去并返回true,否则放回false
                        ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("**"));
 
         .invisibilityOfTheElementLocated()
                   例如://判断某个元素是否不存在于DOM或不可见
                        ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@id='kw']"));
 
         .invisibilityOfElementWithText()
 
         .presenceOfAllElementsLocatedBy()
                   例如://只要存在一个就是true
                        ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//*[@id='kw']"));
         .textToBePresentInElement()
 
         .textToBePresentInElementLocated()
                   例如://元素中的text是否包含语气的字符串
                        ExpectedConditions.textToBePresentInElementLocated(By.xpath("//*[@id='kw']"), "百度一下");
 
         .visibilityOfAllElements()//判断所有元素是否可见
 
         .textToBePresentInElementValue()
                   例如://元素的value属性中是否包含XXXX的字符串
                        ExpectedConditions.textToBePresentInElementValue(By.xpath("//*[@id='kw']"), "XXXX");
 
         .titleIs()    //标题是不是XXXX
 
         .titleContains() //标题是否包含XXXX
 
         .visibilityOf()
                   例如://判断元素(定位后)是否可见
                        ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@id='kw']")));
 
         .alertIsPresent()//判断页面中是否存在alert
 
         .visibilityOfAllElementsLocatedBy()
 
         .visibilityOfElementLocated()
                   例如://判断元素是否可见(非隐藏,并且元素的宽和高都不等以0)
                        ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='kw']"));
 
         .presenceOfElementLocated(By.id("XXX"))          
                   例如://判断该元素是否被加载在DOM中,并不代表该元素一定可见
                        ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='kw']"));
 
         .elementToBeClickable(By.id("XXX"))                              
                   例如://判断元素是否可以点击
                        ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='kw']"));
 
 

JavaSelenium 页面常用基本操作语法的更多相关文章

  1. 转 .md即markdown文件的基本常用编写语法(图文并茂)

    原文链接:.md即markdown文件的基本常用编写语法(图文并茂) 序言: 很久没有写博客了,感觉只要是不写博客,人就很变得很懒,学的知识点感觉还是记不住,渐渐地让我明白,看的越多,懂的越少(你这话 ...

  2. Vue常用模板语法

    常用模板语法   本篇将在上一篇的基础上记录文本渲染.表达式.过滤器以及常用指令的简单用法. 一.文本渲染 Vue支持动态渲染文本,即在修改属性的同时,实时渲染文本内容.同时为了提高渲染效率,也支持只 ...

  3. EditPlus轻量级编辑器配置常用的语法规则!

    打开EditPlus编辑器:工具 ---- 参数设置 ---- 文件 ---- 设置&语法: 先配置简单的CSS语法: 勾选下面的 “自动完成” ,加载对应的ACP文件,配置一些常用的语法: ...

  4. layui js 常用语句语法

    烂笔头: layui组件使用 注意layui的版本. 在head里需要引入css/js文件. 出现 form.verify,form.val is not a function的错误信息时,注意版本, ...

  5. chrome浏览页面常用快捷键

    1.chrome浏览页面常用快捷键 Ctrl+N 打开新窗口. Ctrl+T 打开新标签页. Ctrl+W关闭当前标签 Ctrl + F4 关闭chrome浏览器 Ctrl+Tab 或 Ctrl+Pg ...

  6. .md 即 markdown 文件的基本常用编写语法

    0. 前言 Markdown 是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式.现在的项目都使用了 git 仓库,再加上远程仓库 github 托管,那就难免要写一些 ...

  7. Thinkcmf:页面常用函数

    Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title}        <!--SEO标题--> {$site_seo_keywords}   < ...

  8. MatplotLib常用基本操作

    本文记录matlibplot常用基本操作,都是基本功能,不涉及复杂联合操作,其中各用法详细用法可参考官网: 1. 基本画图操作 ##mofan_matplotlib.pyplot import mat ...

  9. 移动端和PC端页面常用的弹出层

    我们在页面的时候,很多时候用到了弹出层,消息提醒,确认框等等,统一样式的弹出框可以使页面更加优美.在此,我整理一下我们项目的移动端和PC端页面常用的弹出层. 一.移动端 我们需在页面引入弹出框的样式和 ...

随机推荐

  1. Nginx 的 location

    一.location语法 语法: Syntax: location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } Default: — ...

  2. Laravel修改配置后一定要清理缓存 "php artisan config:clear"!

    用laravel踩到一个大坑... 需要使用laravel的队列(queue)功能, 设置 ".env"配置文件 QUEUE_DRIVER=database 按照文档,建立jobs ...

  3. 2018-2-13-win10-uwp-获取指定的文件-AQS

    title author date CreateTime categories win10 uwp 获取指定的文件 AQS lindexi 2018-2-13 17:23:3 +0800 2018-2 ...

  4. 2019浙江ACM省赛——部分题目

    有一些题目过了我还没有重新写,先放一些我重新写好了的吧 签到题拿到了信心吧,9分钟写完两题,我们贼开心,我大哥说签到题有什么好开心的,如果不是我有一些地方卡了下,可能还是更快吧,还有就是测试案例多试了 ...

  5. CF1088F Ehab and a weird weight formula

    CF1088F Ehab and a weird weight formula 推性质猜结论题 第一步转化,考虑把点的贡献加到边里: $con=\sum (log_2(dis(a_u,a_b))\ti ...

  6. asp.net core web api 发布到iis失败 错误500.19

    找了很久,发现是没有装DotNetCore.2.0.0-WindowsHosting.exe的原因. 还是官方文档最给力.部署时遇到问题的朋友可以参考官方文档 https://docs.microso ...

  7. git authentication failed for 或 fatal:not a git repository

    第一种解决 (我的是第一种解决) github上更改密码之后,我在本地操作git发现出错,错误代码如上,在网上搜了一圈,没有解决问题,后发现需要进行如下操作: 进入控制面板>用户账号>凭据 ...

  8. Xgboost参数调节

    转自:https://segmentfault.com/a/1190000014040317 整体: # 1.调试n_estimators cv_params = {'n_estimators': [ ...

  9. CString::CompareNoCase与CString::Compare的区别

    转载:https://blog.csdn.net/lingdxuyan/article/details/4362116 函数原型:int CompareNoCase( LPCTSTR lpsz ) c ...

  10. linux上传文件的命令

    由于svm挂机不能通过svn提交代码,所以今天尝试了一下linux的rz和sz命令 1.sz命令是把文件下载到本地,使用方法如下 sz  文件名 回车之后会弹出一个本地的路径选择框,选择要下载的路径即 ...