qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          操作頁面元素WebElement—Selenium自動化測試指南(4)

          (51Testing軟件測試網(wǎng)獲人民郵電出版社和作者授權(quán)連載本書部分章節(jié)。任何個人或單位未獲得明確的書面許可,不得對本文內(nèi)容復制、轉(zhuǎn)載或進行鏡像,否則將追究法律責任。)

            5.5.7  XPath(xPathToFind)

            如果以上查找方法都無法定位到指定對象,那么可以按XPath進行查找。例如,百度首頁有文本框,如圖5-35所示。

          圖5-35  百度搜索文本框

            其HTML代碼如下:

          <input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

            如要操作該文本框,則可以通過其XPath表達式“//input[@id='kw']”作為查找條件獲取該對象,找到該文本框,然后再輸入文本,例如程序清單5-27和程序清單5-28所示的代碼。

            程序清單5-27  C#代碼

          IWebDriver driver = new FirefoxDriver();
          INavigation navigation = driver.Navigate();
          navigation.GoToUrl(http://www.baidu.com);
          IWebElement baiduTextBox = driver.FindElement(By.XPath("http://input[@id='kw']"));
          baiduTextBox.SendKeys("找到文本框");

            程序清單5-28  Java代碼

          WebDriver driver = new FirefoxDriver();
          Navigation navigation = driver.navigate();
          navigation.to(http://www.baidu.com);
          WebElement baiduTextBox = driver.findElement(By.xpath("http://input[@id='kw']"));
          baiduTextBox.sendKeys("找到文本框");



           5.6  操作頁面元素WebElement

            在Selenium 1中,直接通過Selenium的各種方法來操作頁面元素,但在Selenium 2中則不同,需要通過上5.5講到的By對象先定位到對應(yīng)的頁面元素,然后調(diào)用這個頁面元素的相關(guān)方法來進行操作。

            可以通過WebDriver的FindElement()方法獲得WebElement的對象實例。

            在獲取頁面元素后,就可以對該頁面元素進行各種操作了。

            5.6.1  Click()

            Click()方法用于執(zhí)行單擊元素的操作。例如,百度首頁上有“登錄”超級鏈接,如圖5-36所示。

            圖5-36  登錄按鈕

            要單擊“登錄”超級鏈接,代碼如程序清單5-29或程序清單5-30所示/

            程序清單5-29  C#代碼

          IWebDriver driver = new FirefoxDriver();
          INavigation navigation = driver.Navigate();
          navigation.GoToUrl(http://www.baidu.com);
          IWebElement baiduLogin = driver.FindElement(By.LinkText("登錄"));
          baiduLogin.Click();

            程序清單5-30  Java代碼

          WebDriver driver = new FirefoxDriver();
          Navigation navigation = driver.navigate();
          navigation.to(http://www.baidu.com);
          WebElement baiduLogin = driver.findElement(By.LinkText("登錄"));
          baiduLogin.click();

            在執(zhí)行“WebElement baiduLogin = driver.findElement(By.LinkText("登錄"));”時,程序先通過“driver.findElement(By.LinkText("登錄"));”找到該按鈕,然后將其賦值給變量baiduLogin。baiduLogin就是獲取到的頁面元素,它代表“登錄”按鈕,獲取到它之后就可以對它進行各種操作了,例如單擊操作baiduLogin.click()。

            注意,在Selenium 2中沒有Check/UnCheck這類方法來勾選或取消復選框和單選框,所以只能通過Click方法來進行勾選或取消勾選。例如,百度貼吧的頁面上有“記住我的登錄狀態(tài)”復選框如圖5-37所示。





          只能使用Click()方法對其進行勾選,如程序清單5-31和程序清單5-32所示。

            程序清單5-31  C#代碼

          IWebDriver driver = new FirefoxDriver();
          INavigation navigation = driver.Navigate();
          navigation.GoToUrl(http://tieba.baidu.com/index.html);
          IWebElement rememberMe = driver.FindElement(By.Id("pass_loginLite_input_isMem0"));
          rememberMe.Click();

            程序清單5-32  Java代碼

          WebDriver driver = new FirefoxDriver();
          Navigation navigation = driver.navigate();
          navigation.to(http://tieba.baidu.com/index.html);
          WebElement rememberMe = driver.findElement(By.id("pass_loginLite_input_isMem0"));
          rememberMe.click();

            對于Selenium 2來說,因為頁面元素沒有Select方法,所以也只能用Click模擬實現(xiàn)對下拉列表框的選擇。以百度貼吧搜索為例,如圖5-38所示,假設(shè)要在排序方式下拉列表框中選擇“按相關(guān)性進行排序”。

            其HTML代碼如圖5-39所示。

            可以編寫代碼即可選擇“按相關(guān)性進行排序”,如程序清單5-33和程序清單5-34所示。

            圖5-38  搜索排序下拉列表框

            圖5-39  下拉列表框的HTML代碼


          5.6.3  Clear()

            Clear()方法用于清空input元素的值。例如,百度首頁有搜索文本框,如圖5-42所示。

            圖5-42  百度首頁搜索文本框

            可以先給文本框填入內(nèi)容,然后使用Clear()將其清除,清除前先使用Thread.Sleep(3000)等待3秒,以便于觀察),代碼如程序清單5-37和程序清單5-38所示。

            程序清單5-37  C#代碼

          IWebDriver driver = new FirefoxDriver();
          INavigation navigation = driver.Navigate();
          navigation.GoToUrl(http://www.baidu.com);
          IWebElement baiduTextBox = driver.FindElement(By.XPath("http://input[@id='kw']"));
          baiduTextBox.SendKeys("找到文本框");
          System.Threading.Thread.Sleep(3000);
          baiduTextBox.Clear();

            程序清單5-38  Java代碼

          WebDriver driver = new FirefoxDriver();
          Navigation navigation = driver.navigate();
          navigation.to("http://www.baidu.com");
          WebElement baiduTextBox = driver.findElement(By.id("kw"));
          baiduTextBox.sendKeys("找到文本框");
          try {
          Thread.sleep(3000);
          } catch (InterruptedException e) {
          e.printStackTrace();
          }
          baiduTextBox.clear();

            5.6.4  Submit()

            Submit()方法用于對指定元素所在的form元素進行提交操作。

            例如,百度貼吧的登錄界面如圖5-43所示。

            圖5-43  百度貼吧登錄界面

            用Firebug查看它的HTML,如圖5-44所示。

            圖5-44  百度貼吧登錄HTML代碼

            可以看到,它由一個form組成,只要對這個from中的任何元素使用Submit()方法,都會提交這個form。

          本文選自《Selenium自動化測試指南》第五章節(jié),本站經(jīng)人民郵電出版社和作者的授權(quán),近期將進行部分章節(jié)的連載,敬請期待!

          版權(quán)聲明:51Testing軟件測試網(wǎng)獲人民郵電出版社和作者授權(quán)連載本書部分章節(jié)。

          任何個人或單位未獲得明確的書面許可,不得對本文內(nèi)容復制、轉(zhuǎn)載或進行鏡像,否則將追究法律責任。

          相關(guān)文章:

          查找條件對象By—Selenium自動化測試指南(3)

           

          posted on 2013-08-30 09:28 順其自然EVO 閱讀(11725) 評論(1)  編輯  收藏 所屬分類: selenium and watir webdrivers 自動化測試學習

          評論

          # re: 操作頁面元素WebElement—Selenium自動化測試指南(4)[未登錄] 2014-06-30 14:39 Blue

          你好,我在執(zhí)行baiduTextBox.sendKeys("找到文本框");時,會報Element is not currently visible and so may not be interacted with 求教,一直未解決


            回復  更多評論   

          <2013年8月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 星子县| 科尔| 神木县| 遂川县| 缙云县| 朝阳区| 聊城市| 临潭县| 上蔡县| 洛南县| 和龙市| 阿拉善右旗| 浙江省| 资兴市| 胶州市| 遂川县| 土默特左旗| 瑞昌市| 铁岭市| 出国| 吐鲁番市| 吴旗县| 遂溪县| 靖江市| 黑山县| 武宣县| 松江区| 陵川县| 成都市| 杭锦旗| 潢川县| 定襄县| 应城市| 库车县| 安泽县| 根河市| 四子王旗| 武定县| 道孚县| 拉孜县| 乐平市|