• selenium鼠标操作 包含右击和浮层菜单的选择


    感谢http://www.cnblogs.com/tobecrazy/p/3969390.html  博友的分享

    最近在学习selenium的一些鼠标的相关操作

    自己在百度的相关操作代码

      /**
    * Selenium Keys键盘按键包使用实例键盘操作
    */
    @Test
    public void RightClickTest() throws Exception {
    //右击和左键双击操作
    driver.get("http://www.baidu.com");
    WebElement element = driver.findElement(By.id("su"));
    //右键操作用到Action
    Actions actions=new Actions(driver);
    actions.contextClick(element).perform(); //右击哪个元素,如果不传的话默认左上角元素
    // actions.doubleClick(element).build().perform(); //左键双击,如果不写build也是可以的
    //选择右侧的菜单,选择的也是另存为
    Robot robot = new Robot();

    // This will bring the selection down one by one

    robot.keyPress(KeyEvent.VK_DOWN);

    Thread.sleep(1000);

    robot.keyPress(KeyEvent.VK_DOWN);

    Thread.sleep(1000);

    robot.keyPress(KeyEvent.VK_DOWN);

    Thread.sleep(1000);
    robot.keyPress(KeyEvent.VK_ENTER);
    }

    如下为对方原文

    selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图

    如果我想右键另存为,根本操作不了。

    也有在网上看到webdriver right click option的一些代码,拿来用发现不能用的。

    Actions act = new Actions(driver);
     
    WebElement link = driver.findElement(By.id("xpath"));
     
    act.moveToElement(link).contextClick().sendKeys(Keys.ArrowsDown).build().perform();

    使用Actions没办法拿到右键菜单。

    后来在某论坛发帖,一个印度籍的专家给出solution, perfect!完美解决

    http://forumsqa.com/question/how-to-click-the-option-of-the-menu-which-the-right-click-pop-up/

    方案如下:

    1.selenium 弹出右键菜单

    2.robot选择相关菜单

    3.调用autoIt实现windows gui另存操作

    tips: 

    目测autoIt没法操作web elements,比如我当前使用autoIt获取富文本框,却没法拿到相关的 classs,拿到的只能是浏览器的信息

    废话不多说,test case 如下

    1.打开autoIt的官网

    2.click download 页面

    3.选择autoIt下载图标,单击右键另存为

    4.在弹出另存为窗口输入指定路径,单击保存

    如果您有selenium基础,1~2都很easy。 调出右键菜单只需要action的contexClick方法

    Action.contextClick(myElement).build().perform();

    接下来就是选择右键菜单的另存为

    使用robot,模拟键盘操作,使用方向键 ↓

    复制代码
    Robot robot = new Robot();
     
    // This will bring the selection down one by one
     
    robot.keyPress(KeyEvent.VK_DOWN);
     
    Thread.sleep(1000);
     
    robot.keyPress(KeyEvent.VK_DOWN);
     
    Thread.sleep(1000);
     
    robot.keyPress(KeyEvent.VK_DOWN);
     
    Thread.sleep(1000);
     
    robot.keyPress(KeyEvent.VK_DOWN);
     
    Thread.sleep(1000);
     
    // This is to release the down key, before this enter will not work
     
    robot.keyRelease(KeyEvent.VK_DOWN);
     
    Thread.sleep(1000);
     
    robot.keyPress(KeyEvent.VK_ENTER);
    复制代码

    接下来就该交给autoIt处理另存为窗口

    autoIt使用方法:

    依次定位保存按钮,使用ControlFocus方法,定位编辑框(文件名)title是“另存为”,class是Edit ,instance 是1 

    然后使用ControlSetText方法输入保存路径,定位保存按钮,使用ControlClick方法单击保存按钮

    复制代码
    ControlFocus("另存为", "","Edit1");ControlFocus("title","text",controlID) Edit1=Edit instance 1
    ; Wait 10 seconds for the Upload window to appear
    
      WinWait("[CLASS:#32770]","",10)
    
    ; Set input focus to the edit control of Upload window using the handle returned by WinWait
    
      ControlFocus("另存为","","Edit1")
    
      Sleep(2000)
    
    ; Set the File name text on the Edit field
    
      ControlSetText("另存为", "", "Edit1", "d:autoit-v3-setup")
    
      Sleep(2000)
    
    ; Click on the Open button
    
      ControlClick("另存为", "","Button1");
    复制代码

    然后使用autoIt转换为EXE格式的可执行文件

    使用java的runTime类调用

    Runtime.getRuntime().exec("E:\test\download.exe");

    全部代码如下:

    复制代码
    package com.packt.webdriver.chapter2;
    
     
    
    import java.awt.AWTException;
    import java.awt.Robot;
    import java.awt.event.KeyEvent;
    import java.io.File;
    import java.io.IOException;
    
     
    
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    import org.apache.commons.io.FileUtils;
     
    import org.openqa.selenium.By;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.Keys;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    //import org.openqa.selenium.WebDriver.Navigation;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.interactions.Actions;
    
    import com.thoughtworks.selenium.Selenium;
    import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium;
     
    
     
    
    public class AutoItDownload  {
        
    
    
        public static void main (String [] args) throws InterruptedException, AWTException
        {
             
         
            String URL="https://www.autoitscript.com";
            //avoid Chrome warnning message like "unsupported command-line flag --ignore-certificate-errors. "
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--test-type");
           
            System.setProperty("webdriver.chrome.driver", "E:\chromedriver.exe");  
            WebDriver driver = new ChromeDriver(options);
             //WebDriver driver = new FirefoxDriver();
           
            driver.get(URL);
         
    
            driver.manage().window().maximize(); 
            driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            WebElement editor=driver.findElement(By.xpath("//*[@id='menu-item-207']"));
            Actions actions=new Actions(driver);
            actions.moveToElement(editor).perform();
            //locate download link
            WebElement d=driver.findElement(By.xpath("//*[@id='menu-item-209']/a"));
            d.click();
           
            Thread.sleep(5000);
            //right click the download link
          
           
            //locate download link
        
           
            //right click the download link
            WebElement download=driver.findElement(By.xpath("//img[starts-with(@alt,'download autoit')]"));//*[@id="content-area"]/div/table/tbody/tr[1]/td[2]/p/a/img
            JavascriptExecutor js=(JavascriptExecutor)driver;
            // roll down and keep the element to the center of browser
            js.executeScript("arguments[0].scrollIntoView(true);", download);
            actions.moveToElement(download).contextClick().build().perform();
            Robot robot = new Robot();
            
         // This will bring the selection down one by one
          
         robot.keyPress(KeyEvent.VK_DOWN);
          
         Thread.sleep(1000);
          
         robot.keyPress(KeyEvent.VK_DOWN);
          
         Thread.sleep(1000);
          
         robot.keyPress(KeyEvent.VK_DOWN);
          
         Thread.sleep(1000);
          
         robot.keyPress(KeyEvent.VK_DOWN);
          
         Thread.sleep(1000);
          
        // robot.keyPress(KeyEvent.VK_DOWN);
          
         //Thread.sleep(1000);
          
         // This is to release the down key, before this enter will not work
          
         robot.keyRelease(KeyEvent.VK_DOWN);
          
         Thread.sleep(1000);
          
         robot.keyPress(KeyEvent.VK_ENTER);
           
            
            // this code block will snapshot the browser
            File scrShot=new File("d:\1.png");
            File scrFile= ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            try {
                
                FileUtils.copyFile(scrFile, scrShot);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                System.out.println("Can't save screenshot");
                e.printStackTrace();
            } 
            finally
            {
               
                System.out.println("screen shot finished");
            }
           // System.out.println(scrFile.getAbsolutePath());
            
            //call autoIt to save the file
            try {
                Runtime.getRuntime().exec("E:\test\download.exe");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            Thread.sleep(150000);
            driver.quit();
      
          
        }
        
    }
    复制代码

    效果图:

  • 相关阅读:
    老司机心得之时间管理"入坑"
    shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)
    shell的date命令:使用方法,以及小时、分钟的计算
    一篇详细的linux中shell语言的字符串处理
    linux的string操作(字符串截取,长度计算)
    linux下数学运算器:expr命令(shell中完成数学运算)
    shell脚本格式的几点注意:格式严格,空格不能随便出现(一写就记不住)
    vim的颜色修改,高亮设置。
    pyhton exit
    python判断类型:想知道一个对象(实例或者变量)是什么类型,什么结构的
  • 原文地址:https://www.cnblogs.com/gyadmin/p/10448825.html
Copyright © 2020-2023  润新知