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)也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景

原文地址:https://www.cnblogs.com/lutong1989/p/14884293.html