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坐定位
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");


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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章