java+selenium+pageobject+testng

參考以上文章有個初步的瞭解:
PageObject:
https://blog.csdn.net/hujyhfwfh2/article/details/81055948

https://www.jianshu.com/p/624fa473efe7
PageFactory:
https://www.cnblogs.com/longronglang/p/11386471.html

ChromeDriver下載地址:http://chromedriver.storage.googleapis.com/index.html

具體內容見代碼內容:

特殊處理:

1. java selenium 下拉框處理如下:
在這裏插入圖片描述
在這裏插入圖片描述
2. java selenium時間輸入框處理
在這裏插入圖片描述
3. java selenium 時間控件操作(有id)
普通的時間控件直接使用上面的inpit方法就行,但是有的時間input標籤會有readonly標籤,這時使用input方法則無效。建議使用下面的方法:
在這裏插入圖片描述
原文:
https://www.cnblogs.com/longronglang/p/11327327.html
https://www.cnblogs.com/liujie-/p/7573524.html

4.java selenium時間控件操作(無id)
上面的情況是有id的,所以直接使用document.getElementById進行操作處理,但是但是!我們的程序員有點騷氣,沒有這個id,嗯,搞了好久才弄出來
下圖是初始狀態
在這裏插入圖片描述
進行readonly去除工作:因沒有id屬性,故這裏採用css selector方式進行定位
在這裏插入圖片描述
再次查看去除readonly以後,頁面的展示
在這裏插入圖片描述
原理:
Document的方法 getElementById()返回一個匹配特定 ID的元素. 由於元素的 ID 在大部分情況下要求是獨一無二的,這個方法自然而然地成爲了一個高效查找特定元素的方法。如果需要查找到那些沒有ID 的元素,你可以考慮通過CSS選擇器使用 querySelector(),即document.querySelector()
element是一個 Element 對象。如果當前文檔中擁有特定ID的元素不存在則返回null.
id是大小寫敏感的字符串,代表了所要查找的元素的唯一ID.

5. 極其特殊的下拉框
在這裏插入圖片描述
上面這種下拉框是開發自己寫的下拉框(真的把我頭都搞大了),這種下拉框不能使用上面的方法進行操作,得換種方式進行操作,我先貼上我的代碼
在這裏插入圖片描述
6.java selenium 顯示等待示例
在這裏插入圖片描述
參考鏈接:https://www.cnblogs.com/xiaozhaoboke/p/11130416.html

(1)問題1:點擊下拉框會出現兩個input,第一個是readonly,所以第一個需要去掉readonly屬性,然後給其賦值

JavascriptExecutor removeAttribute_view = (JavascriptExecutor) driver;
removeAttribute_view.executeScript(“document.getElementById(‘companyTypeView’).removeAttribute(‘readonly’);”);
driver.findElement(By.xpath("//*[@id=‘companyTypeView’]")).sendKeys(“天然氣貿易,天然氣運輸,天然氣化肥”);

(2)問題2:第二個input爲隱藏的hidden,所以需要對其進行特殊處理

    JavascriptExecutor removeAttribute = (JavascriptExecutor) driver;
    removeAttribute.executeScript("document.getElementById(\'companyType\').setAttribute('value','SC-MY-YS-HF-HG-FD-RQ-LNGGC-QT');");

附上恩人地址:http://www.it1352.com/960396.html

7. 非alert彈框
有的彈框是html頁面,所以不能使用常規的alert.accept()進行操作,得使用下面這種方法
在這裏插入圖片描述

附上恩人地址:https://www.cnblogs.com/hordehome/p/6406836.html

語言包下載地址:https://blog.csdn.net/qq_38161040/article/details/90727456

java selenium 驗證碼識別、驗證碼登錄
以下是參考文件:
https://www.cnblogs.com/pejsidney/p/9487881.html
https://blog.csdn.net/baoyang_2010/article/details/80511634
https://blog.csdn.net/weixin_40633508/article/details/89925913
https://blog.csdn.net/baoyang_2010/article/details/80511634
https://blog.csdn.net/discover_dream/article/details/80255356
https://blog.csdn.net/qq_32572497/article/details/61920414
以下爲自己寫的demo

    public static void main(String[] args) throws IOException {
        WebDriver driver = new ChromeDriver();
        
        driver.get("url);
        driver.manage().window().maximize();
        WebElement element = driver.findElement(By.xpath("//*[@id=\'code\']"));

        File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);// 得到截圖
        BufferedImage fullImg = ImageIO.read(screenshot);
        Point point = element.getLocation();
        int eleWidth = element.getSize().getWidth();
        int eleHeight = element.getSize().getHeight();
        BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
        //        Rectangle rect = new Rectangle(element.getLocation().x, element.getLocation().y, size.getWidth(), size.getHeight());

        ImageIO.write(eleScreenshot, "png", screenshot);
        System.out.println(point.getX());
        System.out.println(point.getY());
        System.out.println(eleWidth);
        System.out.println(eleHeight);
        File screenshotLocation = new File("E:\\工作文件\\aaa.png");
        FileUtils.copyFile(screenshot, screenshotLocation);

        File imageFile = new File("E:\\工作文件\\aaa.png");
        ITesseract instance = new Tesseract();//調用Tesseract
//        instance.setDatapath("./tessdata");
        instance.setLanguage("eng");
        String result = null;
        try {
            result = instance.doOCR(imageFile);
            System.out.println("result爲"+result);
        } catch (TesseractException e1) {
            e1.printStackTrace();
        }
    }

}

8. 能定位到輸入框的元素,但是卻沒有進行input操作,提示:element not interactabl
這個問題我真的糾結了很久,不管是使用什麼方法都不行,最後好不容易弄出來了
(1)在sendKeys操作之前增加等待時間
(2)如果還是不行的話,建議更換屬性,如使用xpath、css、class等各種屬性值
(3)我使用了上面兩種方法還是不行,最後我是使用的full xpath屬性纔可以的,如下圖
在這裏插入圖片描述
9. selenium 某元素無法點擊
這裏我們把元素點擊分爲兩步,第一步找到元素,第二步進行click操作,要想 進行click操作,那麼首先得確保該元素能找到,這裏在流程裏面可以下圖方式驗證元素是否存在
在這裏插入圖片描述
10. java selenium readonly
在這裏插入圖片描述
在這裏插入圖片描述
11.

遇到的問題:

問題一:selenium打開chrome時,地址欄顯示data;
解決方案:https://blog.csdn.net/sunny10189/article/details/84098378

問題二:Exception in thread “main” org.openqa.selenium.WebDriverException: unknown error: call function result missing ‘value’
解決方案:該問題也是由於版本不對應導致的,故決絕方案同問題一的解決方案一致

問題三:【Robot FrameWork】Ride執行用例時元素已經找到,但是點擊時總報錯“element not interactable”
解決方案:這裏我試着在前面加了等待時間,然後就能找到啦, Thread.sleep(2000);

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