[Selenium With C# 基礎(chǔ)教程] Lesson10-瀏覽器操作

如何來(lái)定位Web頁(yè)面中基本的元素嗽元,在之前的文章已經(jīng)介紹過(guò)了邢羔。在本文中將介紹如何來(lái)控制和操作瀏覽器篙骡。我們先看看Selenium API 中提供的方法囚似。

Selenium API 方法

Selenium API對(duì)Webdriver定義如下:

10-1 SeleniumAPI方法.jpg

從中我們可以看到主要的方法有Manage()闻伶、Navigate()滨攻、ITargetLocator()Quit()

訪問(wèn)指定網(wǎng)址

示例代碼如下:

 string url = "https://www.baidu.com";
 driver.Navigate().GoToUrl(url);

從API里面可以看到IWebdriver里面有一個(gè)屬性Url蓝翰,也可以采用以下方式實(shí)現(xiàn)與上面一樣的目的光绕,如下所示:

driver.Url = "https://www.baidu.com";

訪問(wèn)同一網(wǎng)站的不同頁(yè)面

driver.Navigate().GoToUrl()中所輸入的網(wǎng)址是一個(gè)完整的URL,但對(duì)于測(cè)試同一網(wǎng)站中的不同頁(yè)面畜份,其實(shí)不需要每次都輸入完整的URL诞帐。我們可以創(chuàng)建一個(gè)方法來(lái)進(jìn)行拼接,即可達(dá)到同樣的目的爆雹,也能提高代碼的復(fù)用度停蕉。我們以訪問(wèn)CSDN博客為例愕鼓,詳細(xì)代碼如下:

        IWebDriver driver = new ChromeDriver();
        string mainUrl = "http://blog.csdn.net";
        //創(chuàng)建訪問(wèn)方法
        public void VisitWebSite(string subUrl)
        {
            driver.Navigate().GoToUrl(mainUrl+subUrl);
        }

        [TestMethod]
        public void TestVisitWebSite()
        {
            //訪問(wèn)huilan_same的博客
            VisitWebSite("/huilan_same");
            Thread.Sleep(1000);
            //訪問(wèn)niubitianping的博客
            VisitWebSite("/niubitianping");
            //訪問(wèn)博客主頁(yè)
            VisitWebSite("/");
            Thread.Sleep(1000);
            //訪問(wèn)Hadoop專(zhuān)欄
            VisitWebSite("/column/details/hadoop-force.html");
            driver.Quit();
        }

這種方式還有另外一個(gè)好處就是如果你需要在不同的服務(wù)器上面運(yùn)行和測(cè)試相同的Web程序,而僅僅是更改了網(wǎng)址的部分名稱(chēng)慧起,那么只需要更改一行代碼菇晃,如下所示:

string mainUrl = "http://www.csdn.net";

瀏覽器導(dǎo)航操作

在進(jìn)行Web頁(yè)面瀏覽時(shí),通過(guò)會(huì)有前進(jìn)蚓挤、后退磺送、刷新等操作,通過(guò)Selenium API可以得知屈尼,實(shí)現(xiàn)該操作主要方法為Navigate()

            //后退
            driver.Navigate().Back();
            //前進(jìn)
            driver.Navigate().Forward();
            //刷新
            driver.Navigate().Refresh();

移動(dòng)瀏覽器

在測(cè)試過(guò)程中册着,我們可以將瀏覽器窗口移動(dòng)到指定的位置,從而避免對(duì)其他操作或本身生成影響脾歧。而把瀏覽器移動(dòng)到窗口其他位置并不影響最終的測(cè)試結(jié)果甲捏。示例代碼如下:

driver.Manage().Window.Position = new System.Drawing.Point(200,500);
Thread.Sleep(2000);
driver.Manage().Window.Position = new System.Drawing.Point(0, 0);

位置(0,0)則代表所處位置是屏幕的左上方。

設(shè)置瀏覽器窗口大小

瀏覽器窗口大小設(shè)定主要包含三種鞭执,用戶自定義大小司顿、最大化最小化

  • 用戶自定義瀏覽器大小
driver.Manage().Window.Size = new System.Drawing.Size(800,600);

用戶自定義瀏覽器大小帘撰,需要使用到.NET里面的System.Drawing抡秆。

  • 瀏覽器最大化
driver.Manage().Window.Maximize();
  • 瀏覽器最小化

在Selenium API 中并沒(méi)有提供最小化瀏覽器的方法,但我們可以通過(guò)移動(dòng)窗口到指定位置實(shí)現(xiàn)同樣的目的抖誉,示例代碼如下:

driver.Manage().Window.Position = new System.Drawing.Point(-1500, 0);
Thread.Sleep(2000);
driver.FindElement(By.PartialLinkText("博客專(zhuān)家")).Click();
Thread.Sleep(2000);
driver.Manage().Window.Position = new System.Drawing.Point(300, 400);
driver.Manage().Window.Maximize();

拖動(dòng)滾動(dòng)條

有些Web控件或元素在默認(rèn)窗口大小估脆,無(wú)法直接看見(jiàn)钦奋,需要調(diào)整滾動(dòng)條位置才能看見(jiàn)。這個(gè)時(shí)候我們?cè)跍y(cè)試的過(guò)程中疙赠,可以通過(guò)JavaScript來(lái)模擬拖動(dòng)滾動(dòng)條付材。代碼如下:

   driver.Url = "http://blog.csdn.net/";
   driver.Manage().Window.Maximize();
   Thread.Sleep(1000);
   IWebElement eles = driver.FindElement(By.PartialLinkText("公司簡(jiǎn)介"));
   int elesPostionX = eles.Location.X;
   int elesPostionY = eles.Location.Y;
   string js = "window.scroll(" + elesPostionX + "," + elesPostionY + ")";
   ((IJavaScriptExecutor)driver).ExecuteScript(js);
   eles.Click();

在窗口和Tabs頁(yè)面中切換

在Web頁(yè)面中,如果一個(gè)鏈接含有target="_blank"標(biāo)簽時(shí)圃阳,則代表在點(diǎn)擊鏈接后厌衔,將在瀏覽器新窗口或新Tab中打開(kāi)鏈接(取決于瀏覽器的設(shè)置)。針對(duì)這種情況捍岳,我們可以使用方法SwitchTo()來(lái)進(jìn)行切換到不同的窗口或Tab中富寿。示例代碼如下:

driver.Url = "http://blog.csdn.net/";
driver.Manage().Window.Maximize();
Thread.Sleep(1000);
IWebElement eles = driver.FindElement(By.PartialLinkText("公司簡(jiǎn)介"));
int elesPostionX = eles.Location.X;
int elesPostionY = eles.Location.Y;
string js = "window.scroll(" + elesPostionX + "," + elesPostionY + ")";
((IJavaScriptExecutor)driver).ExecuteScript(js);
//進(jìn)行點(diǎn)擊后將在新的Tab選項(xiàng)卡中打開(kāi)
eles.Click();
ReadOnlyCollection<string> windowsHandles = driver.WindowHandles;
//切換到新窗口
driver.SwitchTo().Window(windowsHandles[1]);
Assert.IsTrue(driver.PageSource.Contains("創(chuàng)立于1999年,是中國(guó)最大的開(kāi)發(fā)者服務(wù)平臺(tái)"));
//返回最初的窗口
driver.SwitchTo().Window(windowsHandles[0]);
ReadOnlyCollection<IWebElement> elements = driver.FindElements(By.XPath("http://div[@id='pub_footerall']/dl/dd[1]/a"));
Assert.AreEqual<int>(9,elements.Count);
driver.Quit();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锣夹,一起剝皮案震驚了整個(gè)濱河市页徐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晕城,老刑警劉巖泞坦,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異砖顷,居然都是意外死亡贰锁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)滤蝠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)豌熄,“玉大人,你說(shuō)我怎么就攤上這事物咳÷嘞眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵览闰,是天一觀的道長(zhǎng)芯肤。 經(jīng)常有香客問(wèn)我,道長(zhǎng)压鉴,這世上最難降的妖魔是什么崖咨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮油吭,結(jié)果婚禮上击蹲,老公的妹妹穿的比我還像新娘。我一直安慰自己婉宰,他們只是感情好歌豺,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著心包,像睡著了一般类咧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蟹腾,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天痕惋,我揣著相機(jī)與錄音,去河邊找鬼岭佳。 笑死血巍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的珊随。 我是一名探鬼主播述寡,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叶洞!你這毒婦竟也來(lái)了鲫凶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衩辟,失蹤者是張志新(化名)和其女友劉穎螟炫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體艺晴,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昼钻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年掸屡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片然评。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仅财,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碗淌,到底是詐尸還是另有隱情盏求,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布亿眠,位于F島的核電站碎罚,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏纳像。R本人自食惡果不足惜荆烈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爹耗。 院中可真熱鬧耙考,春花似錦、人聲如沸潭兽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)山卦。三九已至鞋邑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間账蓉,已是汗流浹背枚碗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铸本,地道東北人肮雨。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像箱玷,于是被迫代替她去往敵國(guó)和親怨规。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容