熟练掌握Selenium工具核心功能总纲(二)

发表于:2021-9-17 09:38

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:掘金

  举一反三:
  那么下拉框如何定位页面元素呢?dom示例:
  <html>
  <title></title>
  <body>
  <div align="center" id="select-class-example">
  <fieldset>
  <legend>Select 下拉列表 示例</legend>
  <select id="fruitselect" name="fruit">
  <option value="apple">苹果</option>
  <option value="orange">桔子</option>
  <option value="peach">桃子</option>
  </select>
  </fieldset>
  </div>
  </body>
  </html>
  那么定位去操作它的方法,也应该同多选框操作一直:
  @Test
  void test_select() throws InterruptedException {
          WebElement element = driver.findElement(By.id("fruitselect"));
          Select select = new Select(element);
      // 下面根据不同方法选择下拉框的值
          Thread.sleep(2000);
          select.selectByIndex(2);
          Thread.sleep(2000);
          select.selectByValue("orange");
          Thread.sleep(2000);
          select.selectByVisibleText("苹果");
     // 遍历集合打印下拉框的所有值
          List<WebElement> options = select.getOptions();
          for (WebElement option : options) {
                  System.out.println("输出单选值:"+option.getText());
          }
  }
  8、掌握alert、confirm、prompt三种弹框处理;这三种弹窗的处理方式不出意外都是Alert类来处理。
  9、selenium三种等待方式的原理及使用场景:强制等待、隐式等待、显示等待;时间同步机制。
  10、selenium等待条件,isEnabled()\isSelected()源码分析:
  比如在某些场景中,需要等待元素出现后才能操作它,这时需要的是等待,至于是哪种等待呢?需要结合实际场景来分析:
  // 下面这个操作是先找元素,是否现实,这里有一个条件即使是隐藏元素,它还是存在dom中,而有些隐藏是不一定会存在dom,那么查找元素是会报异常:NoSuchElementException
   @Test
  public void test_display() throws InterruptedException {
          WebElement el = driver.findElement(By.id("displayed-text"));
          System.out.println("判断输入框是否显示:" + el.isDisplayed());
          if (el.isDisplayed()) {
                  el.sendKeys("displayed");
                  System.out.println("点击隐藏按钮,元素被隐藏");
                  driver.findElement(By.id("hide-textbox")).click();
          }
          Thread.sleep(3000);
          WebElement ele = driver.findElement(By.id("displayed-text"));
          // 因为知道上面的操作是默认显示,并且输入值,if判断为true表示显示,然后输入文本内容并点击隐藏
          if (!ele.isDisplayed()) {
                  // 如果是隐藏的,下面操作显示并输入内容
                  driver.findElement(By.id("show-textbox")).click();
                  System.out.println("点击显示按钮,元素被显示");
                  ele.sendKeys("+再次打开");
          }
          Thread.sleep(3000);
          // 然后再次隐藏
          driver.findElement(By.id("hide-textbox")).click();
  }
  tips:元素的操作,判断状态:isEnabled,判断显示:isDisplayed,判断是否可选:isSelected
  11、鼠标操作:单击、双击、右击、键盘输入及组合键的应用;前提是前端开发支持按键操作。
  在web自动化中,所有键盘操作不一定是支持的,需要前端开发支持。
  import org.openqa.selenium.Keys;// 这个是selenium框架的关键类
  // 发送单个按键操作,element的sendKeys()方法即可
  findElement(By.id("kw")).sendKeys(Keys.ENTER);
  // 如果是组合键,例如control+a
  String select=Keys.chord(Keys.CONTROL,"a");
  findElement(By.id("kw")).sendKeys(select);
  // 使用Actions类处理按键操作
  import org.openqa.selenium.interactions.Actions;
  Actions action = new Actions(driver);
  action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();
  12、需要掌握执行JavaScript的方法和技巧,JavascriptExecutor类:
  import org.openqa.selenium.JavascriptExecutor;
  import org.openqa.selenium.chrome.ChromeDriver;
  System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");
  driver = new ChromeDriver();
  // 下行强制转换
  JavascriptExecutor js=(JavascriptExecutor) driver;
  13、屏幕截图:实现截屏及日期格式保存图片
  思考:会写在哪个位置?
  通常使用TestNG/junit测试框架,会使用@After注解,也就是说在每个测试用例执行完才截图,而不是一个测试类执行完才截图,那么就需要对执行的结果进行断言,错误才截图,而不是随意截图。
  优先封装一个生成文件名的方法:
  /**
   * 获取随机字符串作为文件名的长度
   * @param length
   * @return
   */
  public static String getRandomString(int length) {
          StringBuilder sb = new StringBuilder();
          String characters = "1234567890qwertyuioplkjhgfdsazxcvbnmPOIUYTREWQASDFGHJKLMNBVCXZ";
          for (int i = 0; i < length; i++) {
                  int index = (int) (Math.random() * characters.length());
                  sb.append(index);
          }
          return sb.toString();
  }

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号