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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章