selenium開發-C#/java/Python

背景:以前因爲本身有編寫CefSharp.WinForms 窗體版以及 接口化 WCF+CefSharp.WinForms的網站版本,可是因爲某些緣由,延伸出Selenium學習與研究html

總結:selenium特色是在作自動化測試,若是公司須要自動化測試是個不錯的選擇,開發語言包含不少。你徹底能夠使用本身熟悉的語言進行開發,請查看 https://docs.seleniumhq.org/docs/ 經過幾天的摸索,我的比較仍是建議你們最後部署在windows平臺,linux平臺因爲缺乏可視化,在調試的時候會有不少坑。java

1.C#調用seleniumpython

   請參照 http://www.mamicode.com/info-detail-2746933.htmlmysql

  一、咱們新建一個C#控制檯程序linux

  二、使用Nuget搜索如下依賴庫web

  須要引用的核心庫是Selenium.RC,Selenium.Support,Selenium.WebDriverspring

     MvcWeb版也能夠運行,掛在IIS能夠很好運行sql

 

using OpenQA.Selenium; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Web; using System.Web.Mvc; namespace Maxiot.ResourceServer.Controllers { public class TestController : Controller { //
        // GET: /Test/

        public ActionResult Index() { return View(); } /// <summary>
        /// 獲取數據 /// </summary>
        /// <param name="accesstoken"></param>
        /// <param name="value">非空參數必須傳入數據</param>
        /// <returns></returns>
        public JsonResult GetData() { try { using (IWebDriver driver = new OpenQA.Selenium.Chrome.ChromeDriver()) { driver.Navigate().GoToUrl("www.baidu.com"); var timeouts = driver.Manage().Timeouts(); Thread.Sleep(3000); var source = "aaa" + driver.PageSource; return Json(source, JsonRequestBehavior.AllowGet); } } catch (Exception ex) { return Json(ex.Message, JsonRequestBehavior.AllowGet); } } } }
View Code

 

2.Java調用seleniumchrome

  使用Maven導入包shell

<!-- selenium-java -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<!-- <version>3.4.0</version>-->
</dependency>
package com.example.demoselenium.controller; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.awt.event.KeyEvent; import java.rmi.ServerException; import java.security.Key; import java.util.Arrays; import java.util.List; @RestController @RequestMapping("/api/common/") public class CommonController { @RequestMapping(value = "selenium/OpenChrome", consumes = "application/json", method = RequestMethod.GET) public String getOpenChrome() throws ServerException { String restResult = "aaaa"; try { //設置屬性,經過https://sites.google.com/a/chromium.org/chromedriver/下載對應驅動,若是是linux部署須要下載linux對應驅動 //System.setProperty("webdriver.chrome.driver", "chromedriver"); //linux設置, //System.setProperty("webdriver.chrome.driver", "D:\\Program Files (x86)\\chromedriver_win32\\chromedriver.exe");
            ChromeOptions a = new ChromeOptions(); a.addArguments("--no-sandbox"); a.addArguments("--disable-dev-shm-usage"); //a.addArguments("window-size=1920x3000"); //指定瀏覽器分辨率
            a.addArguments("--disable-gpu"); //谷歌文檔提到須要加上這個屬性來規避bug //a.addArguments("--hide-scrollbars"); //隱藏滾動條, 應對一些特殊頁面 //a.addArguments("blink-settings=imagesEnabled=false"); //不加載圖片, 提高速度
            a.addArguments("--headless"); //瀏覽器不提供可視化頁面. linux下若是系統不支持可視化不加這條會啓動失敗
            WebDriver driver = new ChromeDriver(a); driver.get("http://dpmysql1:802/#/login"); //若是網頁加載不出來的話,get須要加載的時候會至少5秒
            String title = driver.getTitle(); restResult += "title:" + title; //加載不成功,title的就是Ip,能夠經過延時時間+title判斷是否加載成功
            String dataSoruce = driver.getPageSource(); restResult += "dataSource:" + dataSoruce; Thread.sleep(5000); //等待跳轉加載
            WebElement account = driver.findElement(By.id("account")); if (account != null) { account.sendKeys("datamanager");//輸入帳號
                String strAccount = account.getAttribute("value"); restResult += "account:" + strAccount; } WebElement password = driver.findElement(By.id("password")); if (password != null) { password.sendKeys("123");//輸入帳號
                String strPassword = password.getAttribute("value"); restResult += "password:" + strPassword; } WebElement btn = driver.findElement(By.xpath("//*[@id='app']/form/div/div[6]/div/button")); if (btn != null) { btn.click(); //登陸
                restResult += "btn:點擊登入系統"; } Thread.sleep(10000); //等待跳轉加載
            dataSoruce = driver.getPageSource(); String url = driver.getCurrentUrl(); //獲取登陸後的新窗口的url
            if (url.equals("http://dpmysql1:802/#/newhome")) { //登陸成功 //driver.findElement(By.xpath("//*[@id='app']/div/section/section/div[3]/div[1]/span")).click(); //點擊按鈕 //driver.findElement(By.xpath("//*[@id=\"app\"]/div/section/section/div[3]/div[2]/ul[1]/li[2]/a")).click(); //點擊按鈕 //driver.findElement(By.xpath("//*[@id=\"app\"]/div/div/section/div[1]/div/div/div[2]/div/div[2]/div/div[1]/div/div[4]/div[2]/table/tbody/tr[6]/td[10]/div/i[1]")).click(); //點擊按鈕
                restResult += "成功"; } else { //失敗 //String message = driver.findElement(By.xpath("//*[@id=\"app\"]/form/div/div[5]/div[2]/p")).getText(); //System.out.println("*******" + message);
                restResult += "失敗" + url + "--" + dataSoruce + "失敗"; } //加載不成功,title的就是Ip,能夠經過延時時間+title判斷是否加載成功
 System.out.printf(title); System.out.println("*******"); driver.close(); return restResult; } catch (Exception e) { return restResult + "錯誤" + e.getMessage(); } } /** * * @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())); } } }
View Code

Linux運行selenium

1.須要在Linux上面安裝Chrome 參考 https://www.cnblogs.com/z-x-y/p/9506941.html

一、安裝chrome

用下面的命令安裝最新的 Google Chrome

yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
也能夠下載到本地再安裝
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
yum install ./google-chrome-stable_current_x86_64.rpm
安裝必要的庫
yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts

二、安裝 chromedriver

chrome官網 wget https://chromedriver.storage.googleapis.com/2.38/chromedriver_linux64.zip
淘寶源(推薦)
wgethttp://npm.taobao.org/mirrors/chromedriver/2.41/chromedriver_linux64.zip

  將下載的文件解壓,放在以下位置

  unzip chromedriver_linux64.zip

/usr/bin/chromedriver

  給予執行權限

chmod +x /usr/bin/chromedriver

 

目前Java編寫的測試腳本在linux上面運行仍是有些問題,好比登陸按鈕事件在windows上面能夠觸發,Linux失敗,暫時我打算在去研究下Python

 

java代碼下載:https://pan.baidu.com/s/1lnJXK__A8ZcIl3oVJyFC9w

 

Python 編寫 selenuim 

      安裝相應的環境:  可到官網下載最新版本 Python

       工具:    我選擇Pycharm

          配置環境path環境變量,爲了方便命令執行,請配置

     

         cmd查看python版本,若是命令無效,就多是安裝或環境變量未配置成功

         

  安裝selenium

  

  查看安裝的selenium

         

        若是實在cmd配置很差就使用cmd命令行 cd 進入python安裝目錄下的script文件夾下,使用pip install selenium

   

        個人PyCharm不能識別pip install selenium 安裝的 selenium 我選擇在PyCharm進行安裝  

         

        代碼階段

         

import selenium.webdriver from time import sleep #實例化對象
driver=selenium.webdriver.Chrome() try: #設置連接
    driver.get("http://10.60.136.145:802/#/login") sleep(3)    #間隔3秒鐘
    title = driver.title    #獲取網頁標題
    dataSoruce = driver.page_source #獲取網頁資源
    account = driver.find_element_by_id("account")  #獲取帳號
    if not account is None: account.send_keys("datamanager")    #設置帳號
 password = driver.find_element_by_id("password") if not password is None: password.send_keys("123") btn=driver.find_element_by_xpath("//*[@id='app']/form/div/div[6]/div/button") if not btn is None: btn.click() except: print("出錯") finally: driver.close()
View Code

       代碼執行後會自動運行谷歌瀏覽器,並打開設置的網址,而後進行帳號和密碼登陸

相關文章
相關標籤/搜索