首页 > 其他分享 >seleniumUI自动化学习记录

seleniumUI自动化学习记录

时间:2023-03-03 14:46:29浏览次数:53  
标签:控件 exe 记录 seleniumUI driver 点击 iframe 自动化 页面

2019.2.9

尝试了一个启动浏览器并打开指定网址的程序:

这里首先要注意的就是浏览器的版本和selenium jar包的版本必须符合才行,不然会报错

2019.9.16

必须要下载相应的chromedriver.exe放在eclipse工作空间,相应项目的根目录下,chromedriver下载地址:http://chromedriver.storage.googleapis.com/index.html

 尝试了很多版本组合,最后发现Firefox_45.0.1,selenium-2.53.0这两个版本没毛病了

 

2019.11.5

chromedriver和浏览器的版本必须对应,而浏览器总是自动升级,这样项目就会报错,

所以需要防止谷歌浏览器自动更新:

首先删除安装目录中的Update文件夹中的内容:

如果提示程序占用删除不了,就在任务管理器中杀掉进程

然后把这个文件夹的属性改一下:

 

 

 

记录一个bug:

Exception in thread "main" org.openqa.selenium.StaleElementReferenceExceptionstale element reference: element is not attached to the page document

这个报错意思是找得到元素,但是它不在当前可见的页面上,原因:上个操作和下个操作间隔时间太短,代码执行速度比页面渲染速度快。

解决办法:在哪步操作致使页面加载很慢的地方加上等待时间即可

eg:

 

 等待的时间根据页面响应速度自行调整

 

 2020-2-20:

selenium官网下载地址:https://www.selenium.dev/downloads/

 

 

 页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法

基本步骤为:定位元素、操作元素、验证操作结果、记录测试结果

在自动化测试过程中, 测试程序通常的操作页面元素步骤

1. 找到Web的页面元素,并赋予到一个存储对象中 (WebElement)

2. 对存储页面元素的对象进行操作, 例如:点击链接,在输入框中输入字符等

3. 验证页面上的元素是否符合预期

 

 2020-7-1:

操作滚动条

 

//            点击商户下拉框时,由于webdriver只能操作页面可见的元素,所以需要下拉滚动条定位元素
            JavascriptExecutor js = (JavascriptExecutor)driver;
//           循环下拉
/*            for (int i = 0; i < 10; i++) {
                js1.executeScript("scrollTo(0,"+(i * 500)+")");
                waitTime(2000);         
            }    */
            //向下拉10000
           js.executeScript("scrollTo(0,10000)");scrollTo() 方法用于设置浏览器窗口滚动条的水平和垂直位置。方法的第一个参数表示水平的左间距,第二个参数表示垂直的上边距(0是最上面,10000是最底部)
           Thread.sleep(1000);
           WebElement storequerymerchant1 = driver.findElement(By.xpath("//*[@id='searchForm']/div[1]/div[1]/div[1]/div/div/dl/dd[21]"));//定位下拉框滑动后的指定的选项
           storequerymerchant1.click();//点击下拉框里的选项

 

2020-8-5

layui日期控件选择操作:

//            日期控件操作
            
            /*
             * 使用js定位日期控件,并去掉控件的readonly属性
             */
            String js = "document.getElementById('test-laydate-range-datetime').removeAttribute('readonly');";
            ((JavascriptExecutor) driver).executeScript(js);
            /*
             * 清空日期控件中的值,并输入目标日期值;
             */
            WebElement datePicker = driver.findElement(By.id("test-laydate-range-datetime"));
            datePicker.clear();
            Thread.sleep(1000);
            datePicker.sendKeys("2019-11-15 00:00:00 - 2019-11-15 23:59:59");

 

 

 

 

对于页面含有iframe框架的处理方法:

 

 

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

//            定位iframe元素(如上图1所示,因为商户管理模块外就有iframe,所以在进入该模块操作页面前,就要处理iframe)
            WebElement iframe = driver.findElement(By.xpath("//*[@id='LAY_app_body']/div[2]/iframe"));
            driver.switchTo().frame(iframe);

====================
------
这里是iframe下的商户管理页面操作  
            ------- ==================== 下面开始要切换左侧导航菜单(上面商户管理模块操作完毕,左侧导航栏要切换到门店管理模块,所以要进行多窗口切换) /* * 处理浏览器多窗口切换 */ // 获取当前页面句柄 String handle = driver.getWindowHandle(); // 获取所有页面的句柄,并循环判断不是当前的句柄(页面A,切换到页面B,同时关闭页面A,页面B点击触发页面C) for (String temhandle : driver.getWindowHandles()) { if (!temhandle.equals(handle)) driver.close(); driver.switchTo().window(temhandle); } ===================== ----
  这里写左侧导航栏点击【门店管理】操作
         -----
===================== //得到当前窗口的句柄 String currentWindow = driver.getWindowHandle(); //得到所有窗口的句柄 Set<String> handles = driver.getWindowHandles(); //不包括当前窗口 handles.remove(currentWindow); //判断是否存在窗口 System.out.println(handles.size()); if (handles.size() > 0) { try{ //定位窗口 driver.switchTo().window(handles.iterator().next()); }catch(Exception e){ System.out.println(e.getMessage()); } } // frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,对那个页面里的元素进行定位 // 先定位到iframe WebElement iframestore = driver.findElement(By.xpath("//*[@id='LAY_app_body']/div[4]/iframe")); // 再将定位对象传给switch_to_frame()方法 driver.switchTo().frame(iframestore); Thread.sleep(1000);
======================
------
    这里开始写门店管理页面的操作
          ------- ========================  
end,
iframe中的内容操作完成后,
driver.switchTo().defaultContent();//完成当前表单操作后,通过此方法跳出表单

 

 

2020-8-5

报错:

一、

org.openqa.selenium.ElementClickInterceptedException: Element <div class="el-submenu__title"> is not clickable at point (115,358) because another element <div class="el-loading-mask is-fullscreen el-loading-fade-leave-active el-loading-fade-leave-to"> obscures it

错误的意思是:无法点击这个元素,另外一个div元素接收了这个点击。

方法一:

先使用invisibilityOf等待掩盖的div消失不见,再使用elementToBeClickable等待要点击的元素达到可点击的状态。

//要点击的左侧菜单元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));
 
//掩盖的div元素
WebElement ObscureDiv = driver.findElement(By.xpath("//div[@class='el-loading-mask is-fullscreen el-loading-fade-leave-active el-loading-fade-leave-to']"));
 
//使用显示等待,等待掩盖的div消失      
 WebDriverWait wait = new WebDriverWait(driver,60);
 wait.until(ExpectedConditions.invisibilityOf(ObscureDiv));
 
 //等待左侧菜单到可点击状态
 wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));     
    
 //之后再执行点击  
 LeftMenu .click();

方法二:

因为掩盖的div可能会在进行一些操作后,会消失,所以登录后执行一个页面刷新的操作,此div即可消失。再等待左侧菜单到可点击状态即可。

//登录之前的代码
 
//登录后加时间等待,并且进行一次页面刷新
Thread.sleep(3000);
driver.navigate().refresh();
 
 //要点击的左侧菜单元素
WebElement LeftMenu = driver.findElement(By.xpath("xpath"));
 
 //等待左侧菜单到可点击状态
WebDriverWait wait = new WebDriverWait(driver,60);
 wait.until(ExpectedConditions.elementToBeClickable(LeftMenu ));     
    
 //之后再执行点击  
 LeftMenu .click();

 

2020-10-28:

重新打开一个iframe页面,有时定位不到iframe元素,需要处理页面跳转

             String handle2 = driver.getWindowHandle();  
                // 获取所有页面的句柄,并循环判断不是当前的句柄(页面A,切换到页面B,同时关闭页面A,页面B点击触发页面C)
                for (String temhandle : driver.getWindowHandles()) {  
                    if (!temhandle.equals(handle2))  
                        driver.close();
                        driver.switchTo().window(temhandle); 
                
//            定位iframe元素
            WebElement iframe_updatestore = driver.findElement(By.xpath("//*[@id='LAY_app_body']/div[5]/iframe"));
            driver.switchTo().frame(iframe_updatestore);

 

2020-11-6:

关于图片上传:

因为后台的上传文件框不是input,要操作windows控件,但selenium只能操作网页元素。之前试了很多办法,但都失败了,最后决定借助AutoIT这个工具了

需要下载两个组件,下载地址如下:

代码编辑器scite的下载地址:
http://www.scintilla.org/SciTE.html

关于此编辑器的操作介绍:https://blog.csdn.net/rshp_520/article/details/38427339

AutoIt下载地址:(它用于Windows GUI(图形用户界面)的自动化操作,利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务)

https://www.autoitscript.com/site/autoit/downloads/

关于这三个组件的介绍:

AutoIt Windows Info 用于识别Windows控件信息

Compile Script to.exe 用于将AutoIt生成 exe 执行文件

Run Script 用于执行AutoIt脚本、SciTE Script Editor 用于编写AutoIt脚本

 

2020-11-9:

上周决定用AutoIt来实现图片上传了,走了遍流程,但没成功。趁现在项目不忙,再研究下

以下是过程中参考的博客:

https://www.jb51.net/article/121889.htm

https://blog.csdn.net/u011541946/article/details/74359517

https://blog.csdn.net/youanyyou/article/details/83725414

https://www.cnblogs.com/yblafxw/p/9810023.html

https://blog.csdn.net/ak739105231/article/details/89394606

http://www.manongjc.com/detail/8-fmwwffjxescjjnm.html

http://www.51testing.com/html/55/n-3707755-2.html

https://www.jianshu.com/p/6f6bb723fe37

补充:

ChromeDriver不同版本的驱动: https://npm.taobao.org/mirrors/chromedriver/

对应谷歌浏览器下载对应驱动:http://chromedriver.storage.googleapis.com/index.html

实现步骤:

一、定位windows窗口上的元素(使用 

①:首先定位文件名输入框:class 为“Edit”,Instance为“1”

②:定位【打开】按钮,class 为“Button”,Instance为“1”

二、编写脚本(使用

①:首先设置编码,不然会乱码

②编写脚本(根据控件Finder Tool识别到的信息来调用函数编写脚本)

ControlFocus("打开", "","Edit1")
WinWait("[CLASS:#32770]","",10)
ControlSetText("打开", "", "Edit1","D:\testfile.png")
Sleep(2000)
ControlClick("打开", "","Button1");

以上各行脚本的含义:

//定位到选择文件窗口

  ControlFocus ( "窗口标题", "窗口文本", 控件ID)   设置输入焦点到指定窗口的某个控件上

//等待元素出现,时间为20s

  WinWait ( "[CLASS":class的值" ], 超时时间 )  暂停脚本的执行直至指定窗口存在(出现)为止

//向文件名输入框输入本地要上传文件的路径

ControlSetText ( "窗口标题", "窗口文本", 控件ID, "新文本" )   修改指定控件的文本

//  Sleep ( 延迟 )   使脚本暂停指定时间段

//点击打开按钮

ControlClick ( "窗口标题", "窗口文本", "控件ID")   向指定控件发送鼠标点击命令

其中,title即Basic Window Info识别出的Title值,control ID即Basic Control Info识别出的Class和Instance的拼接,如上图拼接后的结果应为Button1

③写好脚本保存,保存后才能运行

 ④运行脚本(目前还看不懂运行后输出的内容是啥意思)

 

 三、将刚刚写的脚本转成exe可执行文件(使用,是为了这个脚本能被java 程序调用,所以需要通过这个工具生成exe文件)

转化完成后,页面会有成功的提示语,之后就在桌面上得到了一个exe文件:

 验证这个文件是否能执行成功的方法:

 按上述步骤操作后,若能把图片传上去就说明exe能执行成功

四、在java脚本中调用exe文件

//            点击上传图片区域
            WebElement upload = driver.findElement(By.xpath("//*[@id='icon1']"));
            upload.click();
            Runtime.getRuntime().exec("C:\\Users\\caiman\\Desktop\\upload.exe");    

目前这样执行后一直报错:

2020-11-9-17:00,折腾了大半天了,终于找到原因了

是因为在调用exe之前没有加上等待时间。加上等待时间后就能上传成功了

//            点击上传图片区域
            WebElement upload = driver.findElement(By.xpath("//*[@id='icon1']"));
            upload.click();
            Thread.sleep(3000);
//            通过Runtime对象调用exe方法
           Runtime.getRuntime().exec("C:\\Users\\caiman\\Desktop\\upload.exe");    

另一种写法:

            Thread.sleep(3000);
//             设置等待3秒
            Runtime exe = Runtime.getRuntime();
//             Java 的Runtime 模块的getruntime.exec()方法可以调用exe 程序并执行。
            try {
                String str = "C://Users//caiman//Desktop//upload.exe";
                exe.exec(str);
//                 运行指定位置的.exe文件
            } catch (IOException e) {
                System.out.println("Error to run the exe");
                e.printStackTrace();
            }

关于exe的路径也可放在项目下面:写相对路径

 

 

2020-11-12:

目前所有代码都是写在一个类中的,长此下去肯定不是办法,该想想办法把用例理一下了

首先安装TestNg:

eclipse中在线安装方式:

(注:此安装过程慢的令人发指!晚上没关机下了一晚上,才刚把要下载的东西下完,第二天过来还要继续看不到头的安装。。。。。)

 

 

地址: http://dl.bintray.com/testng-team/testng-eclipse-release/(官网:https://testng.org/doc/download.html

过程要等五分钟左右,才会搜到TestNG

接下来等待安装完成即可

 

 

第二种:离线安装方式

点击release版地址:https://dl.bintray.com/testng-team/testng-eclipse-release/.

点击最后一个“zipped”,选择与浏览器匹配的版本进行下载

下载后解压目录如下:

可以把features和plugins中的内容分别拷贝到eclipse对应文件夹,或把解压后的整个目录拷贝到dropins中,之后重启eclipse

但是以上操作后,并没有安装成功

查看安装成功办法:File--->New--->Other--->看是否能搜到TestNG

 

2020-12-2

这几天一直在安装TestNG,结果一直装不上,在线装,离线装都试过了,都没用,好崩溃

标签:控件,exe,记录,seleniumUI,driver,点击,iframe,自动化,页面
From: https://www.cnblogs.com/160312/p/10358500.html

相关文章

  • 庆军之假wal系统的实现记录
    要解决的问题:我有一个系统,但是数据库表示它不稳定了,我需要对外高可用。数据库不能用的时候,总不能不用吧。所以,只能特征一致性。临时的数据存在文件wal里面,由另一个线程......
  • C# MongDb踩坑记录--分片写入报错 An upsert on a sharded collection must contain t
    环境C#mongdb.drivercollection分片_id为片键报错信息Awriteoperationresultedinanerror.WriteError:{Category:"Uncategorized",Code:61,Message:......
  • 记录用C#写折半查找算法实现
    折半查找算法前言最近要考试了,重新回顾一下之前学的算法,今天是折半查找,它的平均比较次数是Log2n思想给定一个有序数组A[0..n-1],和查找值K,返回K在A中的下标。折半查......
  • 安装Jupyter踩坑记录
    安装Anaconda之后,进行jupyter安装pipinstalljupyterlab报错解决pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnot......
  • docker记录
    安装(Ubuntu)1.更新aptapt-getupdate2.安装相关依赖apt-getinstallapt-transport-httpsca-certificatescurlgnupg-agen3.添加docker的官方密钥curl-fsSLhttp......
  • 网络问题定位工具记录
    网络问题定位工具记录老王内网发了一篇使用各种工具定位网络丢包问题的文章。里面的工具我发现都没用过。。。惭愧。。。赶紧补充linux命令知识。linux的nstat命令是做......
  • 记录一个移动端图片预览(支持旋转),使用css强制旋转的坑
    注:我并没有解决只是换了一个插件,记录一下问题1、需求要支持图片预览和旋转,<1>我选择是vant组件自带的ImagePreview图片预览,用的css强制实现旋转,<2>出现的问题是样......
  • 2023年第 14期《Python接口自动化+Playwright 》课程,4月2号开学(课程全面升级!)!
    2023年第14期《python接口web自动化+测试开发》课程,4月2号开学(课程全面升级!)主讲老师:上海-悠悠上课方式:微信群视频在线教学,方便交流本期上课时间:2023年4月2号-2023年......
  • python爬虫自动化常用库
    请求库:1、urllib:urllib库是Python3自带的库(Python2有urllib和urllib2,到了Python3统一为urllib),这个库是爬虫里最简单的库。2、requests:requests属于第三方库,使用起来比urlli......
  • 每日记录(十)2022.03.02
    今天学了很多,主要有网页的制作,但是不太熟练,明天继续    今天吃了铁板炒饭,味道还行,,我觉得那个鸡蛋还可以加点味道,不然不太好吃。晚上吃了麻辣烫,我发现学二食堂的麻......