當部分用戶登錄提示拒絕訪問時
把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"); 彈出的文件框默認爲屏幕中間偏一點左上方,所以手動點擊文本框就是用鼠標點擊屏幕中心位置附近 |