Selenium(java)录制时所遇见的问题

当部分用户登录提示拒绝访问时

把dump文件导出来,发现他的创建用户语句如下

GO
/****** Object:  User [apluser]    Script Date: 2019/09/27 20:22:15 ******/
CREATE USER [apluser] WITHOUT LOGIN WITH DEFAULT_SCHEMA=[apluser]

用户解除孤立状态
USE SiteDB1;
exec sp_change_users_login 'UPDATE_ONE', 'apl0001User','Site0001User';
exec sp_change_users_login 'UPDATE_ONE', 'apluser','SiteComUsern';
exec sp_change_users_login 'UPDATE_ONE', 'ope0001User','OpeSite0001User';
exec sp_change_users_login 'UPDATE_ONE', 'opeuser','OpeSiteComUsern';
exec sp_change_users_login 'UPDATE_ONE', 'upd0001User','UpdSite0001User';
exec sp_change_users_login 'UPDATE_ONE', 'upduser','UpdSiteComUsern';

常用Scenario操作流程,在我的资源文件里

 

番号現象問題原因対応案
1 Expected condition failed: waiting for visibility of element located by By.id: ImgBtnDocClsSelect (tried for 30 second(s) with 500 milliseconds interval)等待元素超
有多种可能
1.页面加载过慢,未找到
2.没有switchto到正确页面,找不到元素
3.个别浏览器特殊性
driver.switchTo().defaultContent();
driver.switchTo().frame(1);
driver.switchTo().frame(1);
driver.switchTo().frame(1);
driver.switchTo().frame(1);
认该元素所在frame,确保你入了正确的frame,他可以找到元素,frame下从0开始算,最好使用frame的ID来行定位
有些特殊
frame id是动态的只能用下标进入,也可以robot坐定位
2no such element: Unable to locate element: {"method":"link text","selector":"333"}未找到元素
一般
种情况,排除FRAME进错的前提下,很大可能是因为该元素可能在面元素的子元素里或者被折叠藏起来,然后selenium制的找太快,没来得及加元素,系就已提示未找到的错误提示了

Thread.sleep(2000);或者CommonUtil.waitForElement(driver, By.id("RptDocRegistAttrEdit_ctl01_TxtAttrValue"));
让其在执行完上一个动作后,等待一会,直到所有元素被全部加载出来,再去实现动作行为
3实现拖拽事件按鼠拖拽操作,效果未出拖拽速度快,页面事件未响
1.robot = new Robot();
  robot.setAutoDelay(bobotTime);"
  在每个robot,置一个等待时间,setautodelay,是所有的robot事件都置上一个持续时间一部分已写在共通方法里面,不需要自己另加。
2.robot.delay(bobotTime);是手
在一个robot事件后加上一个等待时间
3.如果以上都不可以,就在中加个渡,robot.mouseMove(),他先移到某一位置,再拖向最位置。"
4面有多个select的候,用findElement(By.xpath())定位不到指定的select,会默认选择第一个一个页面有多个下拉框时,通过xpath获取不到指定的下拉框,但是会默认选择第一个下拉框尝试下下面个方法,下从0开始
Select globalSelect = new Select(driver.findElement(By.id("DrpLstVerCmt")));
globalSelect.selectByIndex(1);
5在需要元素点键时,并不能实现后出现弹出框,鼠没有点的点与一般的Click不同

部分
页面的findElement(By.id触发不了事件
尝试robot
private Robot robot;
private int bobotTime = 3000;
robot = new Robot();
robot.setAutoDelay(bobotTime);
robot.mousePress(KeyEvent.BUTTON3_MASK);
robot.mouseMove(148, 148);
robot.mouseRelease(KeyEvent.BUTTON3_MASK);
6部分入框使用sendKeys(Keys.ENTER),在没有入数据之前会直接触发弹出框。这种情况相当于直接完成了输入框的输入及确认,会直接触发下一步。
sendKeys(Keys.ENTER)相当于执行了一次ENTER键的按下,可能会触发窗口某些按钮的动作。
先使用.click选中输入框后再进行输入等操作。
ENTER,CLICK都试试,如果不行,下下策用robot模事件
7no such/no elements多窗口,无法成功入下一个窗口,或者窗口之无法自由切
在多窗口面,每个窗口都会被put去一个map集合里,通waitForWindow方法,每次将新窗口放去,但如果方法序不,放的就不是新窗口而是原先就有的老窗口,致无法自由切
vars.put("根面", driver.getWindowHandle());
vars.put("window_handles", driver.getWindowHandles());

vars.put("子窗口1", waitForWindow(2000));
driver.switchTo().window(vars.get("子窗口1").toString());
vars.put("window_handles", driver.getWindowHandles());

vars.put("子窗口2", waitForWindow(2000));
driver.switchTo().window(vars.get("子窗口2").toString());
vars.put("window_handles", driver.getWindowHandles());
序放窗口
在新的面出之前行vars.put("window_handles", driver.getWindowHandles());。如果有面自的,要在面关闭时,在vars.get("window_handles")里将其移除
Set<String> whThen = (Set<String>) vars.get("window_handles");
  whThen.remove("文書更新");
  whThen.remove("文書指定");


 
8谷歌启动自动化工具时,右上方会提示被自动化工具检测,影响坐标x,y值SVN\jQueryバージョンアップ\01_Management\15_環境設定\谷歌浏览器\version.dll
去svn上取该dll,放入谷歌浏览器根目录
ChromeOptions options = new ChromeOptions();
   Map<String, Object> prefs = new HashMap<String, Object>();
   prefs.put("credentials_enable_service", false);
   prefs.put("profile.password_manager_enabled", false);
   prefs.put("profile.default_content_setting_values.notifications", 2);
   options.setExperimentalOption("prefs", prefs);
   options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation"));
   options.addArguments("--disable-infobars");
   this.driver = new ChromeDriver(options);
9IE,Google,Edge多浏览器的X,Y坐不一致全屏理,坐标大体一致如果有遇到不能全屏行操作的情况,写3份代,通if ("C".equals(browserType)){来行分支区分
10滚动带滚动条的截,要截多完整 具体情况具体分析,如果确认页面无滚动条,可直接用手里的getScreenShot()来截
滚动条的要分析滚动条是否是面或者frame的,是其子元素的
11edge浏览器打开文书选择页面的弹窗后,用click方法或sendkeys方法点击左边文件夹图标后,右边文件图标的click事件会变为未加载状态,无法点击。 全部使用robot方法点
12带有延迟的文件上传,操作结果只上传了一个文件名浏览器响应延迟Chrome浏览器先click,然后手击弹出的文件框,使用键盘事件Alt+F4关掉界面,再使用sendKeys("D:\\web.txt")上文件
driver.findElement(By.id("ucLinkReviewDoc_fileLinkDoc")).click();
        Thread.sleep(1000);
        robot.mouseMove(441, 557);
        robot.mousePress(KeyEvent.BUTTON1_MASK);
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_F4);
        robot.keyRelease(KeyEvent.VK_ALT);
        robot.keyRelease(KeyEvent.VK_F4);
        driver.findElement(By.id("ucLinkReviewDoc_fileLinkDoc"))
            .sendKeys("D:\\web.txt");


Edge和IE浏览器先使用鼠文件区域(参照),然后手击弹出的文件框,使用键盘事件Alt+F4关掉界面,再使用sendKeys("D:\\web.txt")文件
        robot.mouseMove(333, 353);
        robot.mousePress(KeyEvent.BUTTON1_MASK);
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);
        Thread.sleep(1000);
        robot.mouseMove(441, 557);
        robot.mousePress(KeyEvent.BUTTON1_MASK);
        robot.mouseRelease(KeyEvent.BUTTON1_MASK);
        robot.keyPress(KeyEvent.VK_ALT);
        robot.keyPress(KeyEvent.VK_F4);
        robot.keyRelease(KeyEvent.VK_ALT);
        robot.keyRelease(KeyEvent.VK_F4);
        driver.findElement(By.id("ucLinkReviewDoc_fileLinkDoc"))
            .sendKeys("D:\\web.txt");


出的文件框默认为屏幕中偏一点左上方,所以手文本框就是用鼠屏幕中心位置附近

 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值