selenium webdriver 右鍵另存新檔下載檔案(結合robot and autoIt)

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   使用   java   ar   strong   

首先感謝Lakshay Sharma 大神的指導

最近一直在研究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();            }    }

selenium webdriver 右鍵另存新檔下載檔案(結合robot and autoIt)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.