当部分用户登录提示拒绝访问时
把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坐标定位 |
2 | no 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模拟事件 |
7 | no 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); |
9 | IE,Google,Edge多浏览器的页面X,Y坐标不一致 | 全屏处理,坐标大体一致 | 如果有遇到不能全屏进行操作的情况,写3份代码,通过if ("C".equals(browserType)){来进行分支区分 |
10 | 滚动截图,带滚动条的截图,要截多张完整页面 | 具体情况具体分析,如果确认页面无滚动条,可直接用手顺里的getScreenShot()来截图 有滚动条的要分析滚动条是否是页面或者frame的,还是其子元素的 | |
11 | edge浏览器打开文书选择页面的弹窗后,用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"); 弹出的文件框默认为屏幕中间偏一点左上方,所以手动点击文本框就是用鼠标点击屏幕中心位置附近 |