zoukankan      html  css  js  c++  java
  • sel+python 基础

    1. import packages

       from selenium import webdriver

       from selenium.webdriver.common.keys import Keys

    2. 元素操作

       清空文本

       elm.clear()

       输入文本

       elm.send_keys('xxxx')

       上传文件

       ------type = 'file'-----

       elm.send_keys(r'/locate')

      执行js

      driver.execute_script()

      切换浏览器

      - 获取所有的浏览器窗口:wins = driver.window_handles

      - driver.switch_to.wins(wins[-1])

         driver.switch_to.wins(wins[0])

      切换iframe

      - 

      鼠标操作

      - from selenium.webdriver.common.action_chains import ActionChains

      - ActionChains(driver).move_to_element(elm).perform()

      - ActionChains(driver).move_to_element(elm).click().perform() 

     etc

     拖拽行为

      - action = ActionChains(driver)

        action.move_to_element(elm).click_and_hold().move_by_offset(x,y).release().perform()

     隐式等待

     - driver.implicitly_wait(x)

     如果在x之前就加载出来,则不再等待

     如果超过x未加载出来,则抛超时异常

     显示等待

     - from selenium.webdriver.common.by import By

        from selenium.webedriver.support.wait import WebdriverWait

        WebdriverWait(driver,15).until(EC.presence_of_element_located((By.Xpath,'loc')))

       隐式等待是针对所有元素

       显示等待只针对特定元素

    执行js脚本

    let jsscript = 'document.querySelector('input[id=""]).value=''

    driver.execute_script(jsscript)

    or

    await driver.executeScript((val:string)=>{

      let dom = document.querySelector('input[id=""]) as HTMLInputElement;

          dom.value = val;

    }, '')

    请问如何实现用例失败或者异常时候需要截图? 使用webdriver中的截图类,WebDriver有提供用于截图的TakesScreenshot类 driver.getScreenshotAs

    请问如何分布式执行webdriver用例? 方式一:利用jenkins分布式Master-slave来解决,selenium脚本不需要修改,环境部署好,可以直接跑 方式二:利用selenium grid分布式处理,这个有介绍过点击打开链接,剩下就是把selenium grid放到jenkins里面,让jenkins去管理,这个后续一篇介绍,这种方式,driver的url要改成hud的,脚本需要稍加修改

    如何在脚本中执行 JavaScript 代码?

    方式一:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    String scriptContent = "function multiply(a,b) {return a*b;}";
    //注册脚本
    engine.eval(scriptContent);
    Invocable invocable = (Invocable) engine;
    //调用注册函数
    System.out.println(invocable.invokeFunction("multiply", 2, 3));
    

    方式二:

    //使用管道流,将输出流转为输入流
    PipedReader prd = new PipedReader();
    PipedWriter pwt = new PipedWriter(prd);
    //设置执行结果内容的输出流
    engine.getContext().setWriter(pwt);
    //js文件的路径
    String strFile = Thread.currentThread().getClass().getResource("/").getPath() + "/abc.js";
    Reader reader = new FileReader(new File(strFile));
    engine.eval(reader);
    BufferedReader br = new BufferedReader(prd);
    //开始读执行结果数据
    String str = null;
    while ((str = br.readLine()) != null && str.length() > 0) {
         System.out.println(str);
    }
    br.close();
    pwt.close();
    prd.close();

    当定位策略都失败的时候,你该怎么做?

    80%是你元素定位的不对,那么多定位方法,一个不行换另外一个,直接不能定位,先定位父元素,再循环找子元素。一般来说XPATH都能定位到,无非是可阅读性不强。真的全部失效,请求开发帮你改个元素属性好了。

    如何查找一个文件大小超过5M的文件 find user -size +5000k -type f

    Linux 中查找某个文件并删除它 find . -name '*.exe' -type f -exec rm -rf { }

    Linux 查询 CPU、内存的指令 cat /proc/cpuinfo查看linux系统的CPU型号、类型以及大小 通过greap命令根据Physical Processor ID筛选出多核CPU的信息 cat /proc/meminfo查看linux系统内存大小的详细信息,可以查看总内存,剩余内存、可使用内存等信息。 df -h查看linux系统各分区的使用情况 free -m 查看linux系统内存使用量和交换区使用量

    使用 Shell 获取 Nginx log 中接口包含 topic 且状态码为 200 的接口平均响应时间(越严谨越好)

    cat nginx.log | grep ‘topic’ | grep ‘200’| awk -F ‘’ ‘{sum=sum+$1} END {print “sum=”,sum}’

    Thread 类中的start() 和 run() 方法有什么区别? start() 启动时用的,只调用一次 run() 可以调用多次

    说下左连接和右连接 左外连接:将左表为驱动表进行连接,结果数据包含左表全部数据,以及右表中和左表匹配的数据,左表中有,但右表中没有的数据显示null(取左边全部及右边部分数据) SELECT * FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

    右外连接:将右表为驱动表进行连接,结果数据包含右表全部数据,以及左表中和右表匹配的数据,右表中有,但左表中没有的数据显示null(取右边全部及左边部分数据) SELECT * FROM TABLE1 RIGHT JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

    内连接:等值连接,返回两张表中都满足匹配条件的数据 (取两个表的交集) SELECT * FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.USERNAME = TABLE2.USERNAME SELECT * FROM TABLE1 JOIN TABLE2 ON TABLE1.USERNAME=TABLE2.USERNAME

    装饰器: 装饰器本质上是一个Python函数,其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值(return)也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景

  • 相关阅读:
    Docker01 centos系统安装、centos安装docker、docker安装mongoDB
    WebFlux03 SpringBoot WebFlux实现CRUD
    WebFlux02 SpringBoot WebFlux项目骨架搭建
    WebFlux01 webflux概念、异步servlet、WebFlux意义
    ReactiveStream03
    ReactiveStream02
    ReactiveStream01
    Stream03
    python爬虫2
    python爬虫1
  • 原文地址:https://www.cnblogs.com/lutong1989/p/14884293.html
Copyright © 2011-2022 走看看