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);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值