Webdriver执行JavaScript代码的方式

  WebDriver driver = new ChromeDriver();

  JavascriptExecutor jse = (JavascriptExecutor)driver;

  1.直接传入JavaScript代码

    jse.executeScript("window.open('" + String.format(detailsUrl,urlParam[0],urlParam[1],urlParam[2],urlParam[4],urlParam[3] ) + "')");

  2.传入WebElement执行JS

    WebElement webElement = webDriver.findElement(By.id("tab_2"));
    jse.executeScript("arguments[0].click();", webElement);

WebDriver获取页面元素

  id -->findElement(By.id(“id”))

  class_name -->findElement(By.className("className"))

  linkText -->findElement(By.linkText("Inbox"))

  tagName -->findElement(By.tagName(“html的类别信息如button”))

  css --> 1)绝对路径 在DOM中的具体位置

          findElement(by.cssSelector(“html body div form input”))

            或findElement(by.cssSelector(“html>body>div>form>input”))

      2)相对路径

         driver.findElement(By.cssSelector("input"));第一个input元素。

          driver.findElement(By.cssSelector("input.login")); html标签.class的属性值

      3)相对Id选择器

          driver.findElement(By.cssSelector("input#username"));html标签#id

          driver.findElement(By.cssSelector("#username"));只是#id

      4)属性

          driver.findElement(By.cssSelector("input[name=username]"));使用name属性

          driver.findElement(By.cssSelector("img[alt='Previous']"));使用alt属性

          driver.findElements(By.cssSelector("img[alt]"));通过属性名称查找,页面所有img含有alt属性的标签

          driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));联合多个属性查询

          driver.findElements(By.cssSelector("img:not([alt])"));使用伪类

      5)部分属性 (对于页面上有动态变化的属性的元素是非常有用的)

          driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id头部 如ctrl_12

          driver.findElement(By.cssSelector(Input[id ^ =‘ ctrl’]));匹配到id尾部 如a_ctrl

          driver.findElement(By.cssSelector(Input[id *=‘ ctrl’]));匹配到id中间如1_ctrl_12

  高级CSS

      1)查询子元素

          WebElement userName =  driver.findElement(By.cssSelector("form#loginForm > input"));

          WebElement userName = driver.findEleme(By.cssSelector("form#loginForm :nth-child(2)"));

          :first-child 定位表单第一个子元素

          :last-child 定位表单最后一个子元素

          :nth-child(2) 定位表单中第二个子元素

      2)使用伪类

          driver.findElement(By.cssSelector("input:focus")); 也可使用hover active

          :enable  input:enable 定位属性为enable的input元素

          :disable  input:disable 定位属性为disable的input元素

          :checked input:checked 定位有多选框属性为checked的元素

      3)查询兄弟元素

          driver.findElement(By.cssSelector("#nv a + b")); 定位到a 再定位到和它相邻的b

  Xpath(可以向前向后查询DOM结构,css只能向前)

      1)绝对路径

          driver.findElement(By.xpath("html/body/div/div/form/input"));//如果发生结构改变则找不到   

      2)相对路径

          driver.findElement(By.xpath("//input"));//假设在DOM中的第一个

      3)使用索引

          driver.findElement(By.xpath("//input[2]"));//找第二个input元素

      4)属性值

          driver.findElement(By.xpath("//input[@id='username']"));//使用id属性匹配

          driver.findElement(By.xpath("img[@alt='Previous']"));//使用alt属性

          driver.findElement(By.xpath ("//input[@type='submit'][@value='Login']"));//联合多个属性

          WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'and @value='Login']"));//使用and联合查询

          WebElement previousButton = driver.findElement (By.xpath("//input[@type='submit'or @value='Login']"));//使用or选择查询

      5)属性名称

          List imagesWithAlt = driver.findElements (By.xpath ("img[@alt]"));//使用属性名称  img中带有alt属性的元素

      6)部分属性值

          starts-with()  --> driver.findElement(By.XPath(“input[starts-with(@id,’ctrl’)]”));

          ends-with()  -->driver.findElement(By.XPath(“input[ends-with(@id,’ctrl’)]”));

          contains()  --> starts-with() driver.findElement(By.XPath(“input[contains(@id,’ctrl’)]”));

      7)使用值匹配任意元素属性值

          driver.findElement(By.xpath("//input[@*='username']"));任意属性名称为username的元素

      8)定位父元素或者兄弟元素

          <section class="AutoTest">haha

            <a title="testp"  href="#">  testa</a>

            <div style="#">WEB Auto Test !    </div>

          </section>

          WebElement elementNames =driver.findElement(By.xpath("//a[@title='testp']"));

          System.out.println("elementNames.getText()"+elementNames.getText());

        WebElement elementNamess =driver.findElement(By.xpath("//a[@title='testp']/parent::section"));

          System.out.println("elementNamess.getText()"+elementNamess.getText());

          WebElement elementName = driver.findElement(By.xpath("//a[@title='testp']/parent::section/div"));

          System.out.println("elementName.getText()"+elementName.getText());         

          运行结果如下:

          elementNames.getText()testa
          elementNamess.getText()haha testa
          WEB Auto Test !
          elementName.getText()WEB Auto Test !

          首先我们通过By.xpath("//a[@title='testp']"定位到节点a链接,
          然后我们又通过parent::section定位到他父节点<section|> ,
             又通过//a[@title='testp']/parent::section/div定位到了section的子节点 <div>

findElement将会查询整个DOM 最终返回第一个找到的匹配的元素

findElement可以查询子类,缩写为

driver.findElement(By.id("div1")).findElement(By.linkText("top"));

查找一个元素                 查找这个元素下的子类top

当findElement找不到元素时。抛出NoSuchElementFoundException

findElements()方法返回所有匹配定位策略的WebElement的集合,我们可以使用Java中List类来创建WebElements的实例,实现查找多个元素:

List links = driver.findElements(By.cssSelector("#nv a"));

      

    

  

Webdriver处理页面元素的方式的更多相关文章

  1. Js之Dom学习-三种获取页面元素的方式、事件、innerText和innerHTML的异同

    一.三种获取页面元素的方式: getElementById:通过id来获取 <body> <input type="text" value="请输入一个 ...

  2. webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载

    webdriver定位页面元素时使用set_page_load_time()和JavaScript停止页面加载 原文:https://my.oschina.net/u/2344787/blog/400 ...

  3. Python3.x:Selenium中的webdriver进行页面元素定位

    Python3.x:Selenium中的webdriver进行页面元素定位 页面上的元素就像人一样,有各种属性,比如元素名字,元素id,元素属性(class属性,name属性)等等.webdriver ...

  4. java selenium webdriver实战 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  5. Java+selenium之WebDriver定位页面元素(二)

    Selenium-Webdriver 提供了强大的元素定位方法,支持以下三种方法: 单个对象的定位方法,多个对象的定位方法和层级定位 1. 定位单个元素 // 对于元素的属性包含 id 的情况适用,推 ...

  6. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...

  7. selenium第三课(selenium八种定位页面元素方法)

    selenium webdriver进行元素定位时,通过seleniumAPI官方介绍,获取页面元素的方式一共有以下八种方式,现按照常用→不常用的顺序分别介绍一下. 官方api地址:https://s ...

  8. 基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

    对于自动化测试,尤其是UI的自动化测试.是很多做黑盒功能测试的同学,入门自动化测试一个最为直观的或者说最容易理解的途径之一. 对于手工测试和自动化测试的优劣,网上有很多论述,在这里不作展开讨论.但是, ...

  9. java selenium webdriver第二讲 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

随机推荐

  1. 深度学习基础——Epoch、Iteration、Batchsize

    原文地址:https://www.cnblogs.com/Johnny-z6951/p/11201081.html 梯度下降是一个在机器学习中用于寻找较佳结果(曲线的最小值)的迭代优化算法.梯度的含义 ...

  2. inner join, left join, right join, full outer join的区别

    总的来说,四种join的区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行. right outer join 右连接,返 ...

  3. 【工具】rinetd 使用教程(linux 下的端口转发工具 )

    日期:2019-07-30 20:00:36 更新: 作者:Bay0net 介绍:使用 rinetd 来转发某端口的流量. 0x01. 安装 官网 RINETD 安装方法很简单,一条语句就 OK 了. ...

  4. 新增存储用Parted分区并建LVM卷

    新增存储用Parted分区并建LVM卷 一,Parted分区 1,parted分区  www.ahlinux.com # parted /dev/sda GNU Parted 2.1 使用 /dev/ ...

  5. Day04:继承的意义(下)

    对象转型 向上造型 什么是向上造型? 子类对象赋给父类引用. 父类引用指向子类对象. 子类转成父类 默认进行(父类引用指向子类对象). 为什么需要向上造型? 子类对象可以放入父类类型的数组中. 父类数 ...

  6. LeetCode.1030-曼哈顿距离排序矩阵单元格(Matrix Cells in Distance Order)

    这是小川的第384次更新,第412篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第246题(顺位题号是1030).我们给出一个矩阵,其中R行和C列具有整数坐标(r,c)的 ...

  7. [SHOI2009] 舞会

    OItown要举办了一年一度的超级舞会了,作为主办方的Constantine为了使今年的舞会规模空前,他邀请了许多他的好友和同学去.舞会那天,恰好来了n个男生n个女生.Constantine发现,一般 ...

  8. IF-ELSE嵌套练习

    一,1,编写程序,由键盘输入三个整数分别存入变量num1,num2,num3中,对它们进行排序,使用if-else结构,并按从小到大的顺序输出: package practice; import ja ...

  9. zabbix4安装部署

    参考: https://www.cnblogs.com/barneywill/p/10380622.html https://www.cnblogs.com/yinzhengjie/p/1037256 ...

  10. PTA(Basic Level)1031.查验身份证

    一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...