[Selenium With C# 基礎教程] Lesson13-彈出窗口

在本節(jié),將介紹Web頁面常見和一些彈出窗口,如上傳文件彈出窗口。而大部分的彈出窗口,如選擇和上傳文件,大都使用的是本地的Windows窗口,而Selenium僅能操作瀏覽器,這樣就對測試形成了挑戰(zhàn)。Selenium API處理彈出窗口的主要是IAlert接口,詳細如下所示:

13-3 IAlert類.jpg

文件上傳

下圖是一種常見的文件上傳彈出窗口:

13-1 文件上傳示例_c2i.jpg

HTML源碼如下:

<body>
  請選擇上傳文件:<input type="file" name="fileUpload" id="fileUpload" size="50" />
</body>

相應的定位代碼如下:

    string filePath = @"C:\類和對象.jpg";
    driver.FindElement(By.Id("fileUpload")).SendKeys(filePath);

在以上的代碼里面,直接將上傳的文件路徑寫成絕對路徑了,這樣做靈活性不夠,擴展性較差,并不推薦。建議在做測試的時候,將測試文件放在測試項目里面,這樣我們就可以使用相對路徑來選擇文件。示例代碼如下:

string filPath = MyClass.GetFilePath() + @"testData\類和對象.jpg";
driver.FindElement(By.Id("fileUpload")).SendKeys(filePath);

JavaScript彈出窗口

JavsScript彈出窗口是通過使用Javascript創(chuàng)建,主要用來確認操作和提示消息。一種常見的彈出框如下所示:

13-2 彈出窗口示例.jpg

HTML源碼如下:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<script type="text/javascript">
    function show_confirm() 
    {
        var r = confirm("請點擊");
    }
</script>
</head>
<body>
    請選擇上傳文件: <input type="file" name="fileUpload" id="fileUpload" size="50" />
    <br /><br />
    <input type="button" onclick="show_confirm()" value="顯示確認對話框" />
</body>
</html>

定位示例代碼:

  • 方法一:使用Selenium API中的IAlert接口
    driver.FindElement(By.XPath("http://input[@value='顯示確認對話框']")).Click();
    IAlert alert = driver.SwitchTo().Alert();
    if (alert.Text.Contains("請點擊"))
    {
        alert.Accept();
    }
    else
    {
        alert.Dismiss();
    }
  • 方法二:使用JavaScript
((IJavaScriptExecutor)driver).ExecuteScript("window.confirm=function(){return true;}");
((IJavaScriptExecutor)driver).ExecuteScript("window.alert=function(){return true;}");
((IJavaScriptExecutor)driver).ExecuteScript("window.prompt=function(){return true;}");
driver.FindElement(By.XPath("http://input[@value='顯示確認對話框']")).Click();

模態(tài)對話框

隨著JavaScript的發(fā)展,出現一些非常靈活易用的JavaScript庫,如Bootstrap,這些JavaScript庫逐漸替換了Javascript默認的提示框。一種典型的對話框如下所示:

13-4 模態(tài)對話框示例_c2i.jpg

相比較好于原生態(tài)的JavaScript提示框,對于模態(tài)對話框,寫測試腳本要容易很多,示例代碼如下:

driver.FindElement(By.Id("modalpopup")).Click();
Thread.Sleep(500);
driver.FindElement(By.XPath("http://button[contains(@class,'btn btn-default')]")).Click();

設定超時時間

在測試過程中,彈出窗口未及時處理,將導致測試失敗。對于這種情況,我們通過給測試方法添加屬性TimeoutAttribute來指定最長的時間。

    [TestMethod]
    [Timeout(10*1000)] //超時時間為10秒
    public void TestModalPopUp()
    {
     //實現代碼
    }

在執(zhí)行用例時,如果超出設定的時間,會出現以下報錯
Test 'TestModalPopUp' exceeded execution timeout period.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容