码迷,mamicode.com
首页 > 编程语言 > 详细

Java&Selenium&JS&AWT之那些难以点击到的按钮

时间:2018-12-12 14:50:59      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:sdi   附加   .com   exe   string   自动化   xpath定位   ESS   col   

一、摘要

本篇博文的重点并不是简单的click()方法,而是要讲的是那些click()方法失效的时候的处理方式,其实做自动化久了我们都能发现研发的代码并不是都那么美丽,selenium支持的8种定位方式也大多形同摆设,而测试往往处于弱势,即便是自动化工程师你也不敢跟研发说你的空间没有id,因为弱势无法挑战,从多年的管理角度说合理的pk和挑战是良药,废话不多说故事也不多讲看内容吧

二、页面

技术分享图片

这是我实际工作中的一个弹出,简单说一下它到底是个什么东西,在这里它没有iframe、不是alert、不是prompt,什么都不是,它只是一层一层的html代码

虽然能看懂前端代码但我确实不知道为什么

三、点击“确定”按钮

 方法一:我们第一个想到的一定是selenium提供的click()方法

driver.findElement(By.xpath(".....")).click();

那么这个页面就让你失望了,并没什么稀奇古怪的东西,但是就是点不了

方法二:那么我们一定是要点了它才能完成测试用例的执行,第一种方式不行,还有什么其他方法呢,我去手动测试这个按钮,是否接受键盘的Enter键,果然响应了Enter键

于是立刻用selenium提供的方法代码实现

driver.findElement(By.xpath("...")).sendKeys(Keys.ENTER);

可惜的是又失望了,还是不能生效,导致测试用例执行失败

方法三:于是封装了敲击键盘的方法,尝试不用Selenium提供的方法,实现敲击Enter键

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
public class KeyBoardUtil {
 /**Enter键封装*/
    public static void pressEnterKey(){
        Robot robot = null;
        try{
            robot = new Robot();
        }catch (AWTException e){
            e.printStackTrace();
        }
        //调用keypress方法来实现按下Enter键
        assert robot != null;
        robot.keyPress(KeyEvent.VK_ENTER);
        //调用keyrelease方法来实现释放Enter键
        robot.keyRelease(KeyEvent.VK_ENTER);
    }
}

幸运的是这个方法生效了,于是在我的代码里直接调用了这个静态方法pressEnterKey(), 解决了这个问题

方法四:如果还是不能解决问题,就要使用第四种方式了,JS完成单击操作

    /**
     *
     * @param driver 浏览器驱动
     * @param xpath xpath定位表达式
     */
    public static void javaScriptClick(WebDriver driver, String xpath) {
        WebElement element = driver.findElement(By.xpath(xpath));
        try{
            if(element.isEnabled() && element.isDisplayed()){
                System.out.println("使用JS进行也面元素单击");
                //执行JS语句arguments[0].click();
                ((JavascriptExecutor) driver).executeScript("arguments[0].click();", element);
            }else {
                System.out.println("页面上元素无法进行单击操作");
            }
        }catch (StaleElementReferenceException e){
            System.out.println("页面元素没有附加在页面中" + Arrays.toString(e.getStackTrace()));
        }catch (NoSuchElementException e){
            System.out.println("在页面中没有找到要操作的元素" + Arrays.toString(e.getStackTrace()));
        }catch (Exception e){
            System.out.println("无法完成单击操作" + Arrays.toString(e.getStackTrace()));
        }
    }

 

Java&Selenium&JS&AWT之那些难以点击到的按钮

标签:sdi   附加   .com   exe   string   自动化   xpath定位   ESS   col   

原文地址:https://www.cnblogs.com/davieyang/p/10107772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!