selenium--各種元素的操作


生成一個web對象

IWebDriver driver;
driver = new FirefoxDriver();

selenium打開瀏覽器

package org.coderinfo.demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class StartBrowser {
public static void main(String[] args) {
/*
* 如果你的 FireFox 沒有安裝在默認目錄,那么必須在程序中設置 例如:
* System.setProperty("webdriver.firefox.bin"
* ,"D:\\Program Files\\Mozilla Firefox\\firefox.exe");
*/
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com.hk");
}

跳轉到指定頁面
driver.Navigate().GoToUrl(baseURL + "/");
driver.title 取得當前頁的title
driver.url 取得當前頁的url

輸入框(text field or textarea)

找到輸入框元素:IWebElement element = driver.findElement(By.id("passwd-id"));

在輸入框中輸入內容:

element.sendKeys(“test”);

將輸入框清空:

element.clear();

獲取輸入框的文本內容:

element.Text;

單選項

 if (CreatePassengerPage.getInsurance().Selected == false)
  {
        CreatePassengerPage.getInsurance().Click();
  }

下拉選擇框(Select)

 SelectElement selectCity=new SelectElement(driver.FindElement(By.Id("City")));

(1)通過下拉框的索引選中第二項                    selectCity.SelectByIndex(2);      

(2)通過下拉列表中的選項的value屬性選中      selectCity.SelectByValue("10");

(3)通過下拉列表中的選項的Text屬性選中      selectCity.SelectByText("北京");

下拉選擇
   SelectElement feeBasisDDL = new SelectElement(newRule.getFeeBasisDDL());
   feeBasisDDL.SelectByText(CaseData["FeeBasis"].ToString());
定位frame中元素
(1)進入frame
  driver.SwitchTo().Frame("frame");
(2)定位元素
  driver.FindElement(By.Id("div1"));
  driver.FindElement(By.Id("input1"));
(3)退出frame
  driver.SwitchTo().DefaultContent();
如何處理alert、confirm、prompt對話框
(1)取得alert框信息
    Html代碼:
    <input id = "alert" value = "alert" type = "button" nclick = "alert('歡迎!請按確認繼續!');"/> 
        driver.FindElement(By.Id("alert")).Click();
        IAlert alert = driver.SwitchTo().Alert();
        Console.WriteLine(alert.Text);
        confirm.Dismiss(); //點彈框關閉
(2)取得輸出對話框上面的文字
    Html代碼:
    <input id = "confirm" value = "confirm" type = "button" nclick = "confirm('確定嗎?');"/>
        driver.FindElement(By.Id("confirm")).Click();
        IAlert confirm = driver.SwitchTo().Alert();
        Console.WriteLine(confirm.Text);
        confirm.Accept(); //點擊確定
(3)點擊按鈕,輸入名字,然后點擊確認
    Html代碼:
    <input id = "prompt" value = "prompt" type = "button" nclick = "var name = prompt('請輸入你的名字:','請輸入 
    你的名字'); document.write(name) "/>
        driver.FindElement(By.Id("prompt")).Click();
        IAlert prompt = driver.SwitchTo().Alert();
        Console.WriteLine(prompt.Text);
        prompt.SendKeys("Hello");
        prompt.Accept(); //點擊確定
執行js腳本
((IJavaScriptExecutor) driver).ExecuteScript("js")

<input id="FHX_txtFromDate" type="text" readonly="readonly" name="FromTime" autocomplete="off" placeholder="yyyy-mm-dd" style="background-image: url("http://pic.c-ctrip.com/cquery/pic_aftertomorrow.png"); background-position: right center; background-repeat: no-repeat;"/>

l在實際編寫腳本的過程中經常會遇到很多元素的屬性是readonly的,表示此元素只讀,不可進行賦值操作(此類情況常出現於日歷框組件中)
l對於此類元素如果希望變更他的值,對於直接操作日歷框會比較復雜,日歷框的元素表達是按天拼接的,如果直接操作會需要做較多的運算和處理
l對於此類元素,只能通過JS修改元素的屬性,去掉只讀屬性后就可以直接賦值了
修改元素屬性方法

/// <summary>

        /// 設置元素只讀屬性為否

        /// </summary>

        /// <param name="type">ById、ByName、ByTagName</param>

        /// <param name="value">value</param>

        public void setReadOnlyFalseByAttribute(string type, string value)

        {

            string js = "";

            switch (type)

            {

                case "ById":

                    js = "document.getElementById('" + value + "').readOnly=false;";

                    break;

                case "ByName":

                    js = "document.getElementsByName('" + value + "').item(O).readOnly=false;";

                    break;

                case "ByTagName":

                    js = "document.getElementsByTagName('" + value + "').item(O).readOnly=false;";

                    break;

            }

            ((IJavaScriptExecutor)driver).ExecuteScript(js);

        }

findElenments中找某一個元素
       int num = driver.FindElements(By.XPath("//div[text()='更多支付方式']")).Count;
       if (Convert.ToBoolean(num))
           {
                CreatePayPage.getMorePay().Click();
           }
IWebDriver driver = new FirefoxDriver();
INavigation navigation = driver.Navigate();
navigation.GoToUrl(http://www.baidu.com);
navigation.GoToUrl("http://tieba.baidu.com/f/search/adv");
IWebElement select = driver.FindElement(By.Name("sm"));
string targetText = "按相關性排序";
System.Collections.Generic.IList<IWebElement> ptions = select.FindElements(By.TagName("option"));
for (int i = 0; i < options.Count; i++)
{
if (options[i].Text == targetText)
{
options[i].Click();
}
}
WebDriver driver = new FirefoxDriver();
Navigation navigation = driver.navigate();
navigation.to(http://www.baidu.com);
navigation.to("http://tieba.baidu.com/f/search/adv");
WebElement select = driver.findElement(By.name("sm"));
String targetText = "按相關性排序";
java.util.List<WebElement> ptions = select.findElements(By.tagName("option"));
for (int i = 0; i < options.size(); i++)
{
if (options.get(i).getText().equals(targetText))
{
options.get(i).click();
}
}
 
  try
            {
              if (driver.WindowHandles.Count > 0)
              {
                   //選擇乘客,下一步核對
                    PassengerBusiness Passenger = new PassengerBusiness(driver, CaseData, CheckData);
                    Passenger.PassengerMessage(path, casename);
                    //支付並驗證
                    PayEntryBusiness PayEntry = new PayEntryBusiness(driver, CaseData, CheckData);
                    PayEntry.Pay(path, casename);
                }
            }
            catch (Exception e)
            {
                Log.Info("搜索時異常,直接pass用例");
            }
判斷頁面是否有元素
  public IWebElement getDivContactModule()
        {
            return driver.FindElements(By.Id("contactInfo")).Count > 0 ? driver.FindElement(By.Id("contactInfo")) : null;
        }
 
passengerInfo.getLblTotalAmount().Text.ToString().Trim().TrimStart('¥');
獲取時間
now_time = DataTime.Now
獲取明天
tomorrow = DataTime.Now.AddDay(1)
昨天
yestaday = DataTime.Now.AddDay(-1)
 Xml requestXML = new Xml(requestStr);
 requestXML.SetElementValueByXpath("//FlightInfos/FlightInfo[1]/EffectDate", string.Format("{0}T00:00:00", DateTime.Today.AddDays(5).ToString("yyyy-MM-dd")));
操作鍵盤TAB鍵
在selenium中隱藏元素由於屬性是隱藏的,如果直接對隱藏屬性進行操作會拋出異常
所以如果需要對隱藏元素,必須首先使隱藏元素彈出,此時元素的隱藏屬性會失去
需要注意的時,實際在selenium中彈出隱藏元素,並非模擬操作那樣鼠標點擊就可以,必須要通過其他方式,如:使用TAB鍵從上一元素順序切換到“出發城市”元素框上;或者通過對“出發城市”這個元素使用sendkey”\n”也可以彈出隱藏元素

 //操作鍵盤TAB鍵

Actions enter = new Actions(driver);

enter.SendKeys(Keys.Tab).Perform();

如何等待頁面元素加載完成
(1)明確等待

driver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromMinutes(5));
(2)隱形等待

如何得到彈出窗口
(1)當前窗口的句柄
    driver.CurrentWindowHandle
(2)所有窗口的句柄
    driver.WindowHandles
(3)根據句柄得到窗口
    if driver.CurrentWindowHandle=driver.WindowHandles[i]
    IWebDriver window=driver.SwitchTo().Window(driver.WindowHandles[i])
(4)根據窗口得到title,url
    window.Title
    window.Url
如何操作cookie
(1)增加一個name = "name",value="value"的cookie
    Cookie cookie=new Cookie("name","value");
        driver.Manage().Cookies.AddCookie(cookie);
(2)得到頁面下所有的cookies,輸入它的所在域、name、value、有效日期、路徑
    ICookieJar cookies=driver.Manage().Cookies;
        Cookie co = cookies.GetCookieNamed("name");
        Console.WriteLine(co.Domain);
        Console.WriteLine(co.Name);
        Console.WriteLine(co.Value);
        Console.WriteLine(co.Expiry);
        Console.WriteLine(co.Path);
(3)刪除cookie三種方法
    a)通過cookie的name
    driver.Manage().Cookies.DeleteCookieNamed("CookieName");
    b)通過cookie對象
    driver.Manage().Cookies.DeleteCookie(cookie);
    c)全部刪除
    driver.Manage().Cookies.DeleteAllCookies();
如何利用Selenium-webdriver截圖
        Screenshot screenShotFile = ((ITakesScreenshot)driver).GetScreenshot();
        screenShotFile.SaveAsFile("test",ImageFormat.Jpeg);
如何取得table中的內容
 (1)通過行得到列的方法
    private IWebElement GetCell(IWebElement row,int cell)
        {
            IList<IWebElement> cells;
            IWebElement target = null;
            //列里面有"<th>"、"<td>"兩種標簽,所以分開處理
            if(row.FindElements(By.TagName("th")).Count>0)
            {
                cells = row.FindElements(By.TagName("th"));
                target = cells[cell];
            }

            if(row.FindElements(By.TagName("td")).Count>0)
            {
                cells = row.FindElements(By.TagName("td"));
                target = cells[cell];
            }
            return target;
        }
(2)通過By得到行的方法
    public String GetCellText(By by,String tableCellAddress)
        {
            //得到table元素
            IWebElement table = driver.FindElement(by);
            //對所要查找的單元格位置字符進行分解,得到對應的行、列
            int index = tableCellAddress.Trim().IndexOf('.');
            int row = Convert.ToInt32(tableCellAddress.Substring(0, index));
            int cell = Convert.ToInt32(tableCellAddress.Substring(index + 1));
            //得到table表中所有行對象,並得到所要查詢的行對象
            IList<IWebElement> rows = table.FindElements(By.TagName("tr"));
            IWebElement theRow = rows[row];
            return GetCell(theRow, cell).Text;
        }
(3)通過參數得到對應行列的內容
    Console.WriteLine(GetCellText(By.Id("mytable"),"0.2")); //得到id="mytable"中的第一行第三列的表格內容

多選項(checkbox)

多選項的操作和單選的差不多:

WebElement checkbox = driver.findElement(By.id("myCheckbox."));

checkbox.click();

checkbox.clear();

checkbox.isSelected();

checkbox.isEnabled();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM