zoukankan      html  css  js  c++  java
  • [Selenium With C#基础教程] Lesson-05 文本框

    作者:Surpassme

    来源:http://www.jianshu.com/p/7dca7d0d1ea3

    声明:本文为原创文章,如需转载请在文章页面明显位置给出原文链接,谢谢。

    文本框在Web页面中,通常可以允许用户输入一些文本并发送到服务器。通常有两种表现形式:密码文本普通文本,在密码文本中输入文本通常是经常特殊处理的,常见的是将用户输入的文本用或*显示,在普通文本中也允许输入单选或多行的文字。如下图所示:

    5-1 文本框示例_c2i.jpg

    HTML源码如下:

      用户名: <input type="text" name="username" id="userID"> <br /><br />
      密 码: <input type="password" name="password" id="passID"> <br /><br />
      注释: <br />
      <textarea id="commentsID" rows="3" cols="50" name="comments"></textarea>
    

    通过Name定位输入文本

    通过使用name属性来识别定位文本框,是开发经常使用的一种方法。示例如下:

    driver.FindElement(By.Name("username")).SendKeys("username");
    

    通过Id定位输入文本

    通过使用Web元素的Id来识别定位文本框,应该是测试过程最简单和最快的方法了,示例如下:

    driver.FindElement(By.Id("userID")).SendKeys("username");
    

    向密码文本输入文本

    在Selenium中,密码文本框的处理其实与普通文本框是一样的,只是密码文本框中输入的字符是经过处理以特殊字符展现而已。示例代码如下:

    driver.FindElement(By.Id("passID")).SendKeys("password");
    

    清空输入的文本

    对同一个文本框而言,在使用SendKeys()方法时,有时候会将旧的文本和新输入的文本合并在一起,从而导致测试失败。因此在需要输入文本的地方,我们可以先调用Clear()方法清空文本,再输入新的文本值。

     driver.FindElement(By.Id("userID")).SendKeys("username");
     driver.FindElement(By.Id("userID")).SendKeys(" test");
    

    以上的示例最终输入的文本值变会变成** username test**,而正确的方法如下所示:

     river.FindElement(By.Id("userID")).Clear();
     driver.FindElement(By.Id("userID")).SendKeys("username");
    

    对于密码框也建议采取同样的方法,避免输入文本被合并而导致测试失败。

    在文本框中输入多行文本

    在Selenium中,处理多行文本框中普通文本框一样,示例如下:

    driver.FindElement(By.Id("commentsID")).SendKeys("comments 
     Test Multiline Text");
    

    其中 代表换行,开始新的一行。最终效果图如下:

    5-2 多选文本示例_c2i.jpg

    断言文本的值

    在测试过程中,我们有时候需要获取到用户输入的文本信息,来验证是否与预期保持一致,这时候我们使用断言Assert来实现,示例代码如下:

    IWebElement textValue = driver.FindElement(By.Id("userID"));
    textValue.SendKeys("testTextValue");
    Console.WriteLine(textValue.GetAttribute("value"));
    Assert.AreEqual<string>("testTextValue", textValue.GetAttribute("value"));
    

    最终的结果如下图所示:

    5-3 断言文本值_c2i.jpg

    给元素设置焦点

    在做自动化的过程中,有时候需要给元素设置焦点。而在Selenium中没有专门设置焦点的方法,但变通一下,我们可能通过发送一个空的按钮响应来解决该问题。

    driver.FindElement(By.Id("commentsID")).SendKeys("");
    

    当然,也可以采用JavaScript来解决该问题,示例代码如下:

    IWebElement elements = driver.FindElement(By.Id("commentsID"));
    ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].focus();", elements);
    

    改变只读或禁用状态文本框的值

    只读属性的文本框在浏览器中是不可编辑的,而禁用状态的文本框通常是以灰色显示的。如下图所示:

    5-4  只读和禁用状态文本框_c2i.jpg

    HTML源码如下所示:

    <!--只读状态的文本框-->
    只读状态文本框:<input type="text" name="readOnlyText" id="readOnlyId" readonly="true" value="只读状态"/>
    <br /><br />
    <!--禁用状态的文本框-->
    禁用状态文本框:<input type="text" name="disableText" id="disableTextId" disabled="true" value="禁用状态" />
    

    如果文本框被设置只读属性,如果继续按照以下方法进行输入,则会报错。

    driver.FindElement(By.Id("readOnlyId")).SendKeys("Read Only Test");
    

    报错信息如下:

    5-5 只读状态报错_c2i.jpg

    注意:这段代码在IE中会报错,而在Chrome中却不会报错

    在一些地方用常规方法不能解决时,我们可以尝试采用JavaScript来解决此类问题,示例代码如下所示:

    ((IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('readOnlyId').value='改变只读文本的值'"); 
    ((IJavaScriptExecutor)driver).ExecuteScript("document.getElementById('disableTextId').value='改变禁用文本的值'");
    

    最终实现的效果如下:

    5-6 改变值_c2i.jpg

    文本框在日常测试过程也是比较常见的几种类型之一,结合以上各种方法,相信能够在自动化测试中从容应对。

  • 相关阅读:
    zoj 2316 Matrix Multiplication 解题报告
    BestCoder7 1001 Little Pony and Permutation(hdu 4985) 解题报告
    codeforces 463C. Gargari and Bishops 解题报告
    codeforces 463B Caisa and Pylons 解题报告
    codeforces 463A Caisa and Sugar 解题报告
    CSS3新的字体尺寸单位rem
    CSS中文字体对照表
    引用外部CSS的link和import方式的分析与比较
    CSS样式表引用方式
    10个CSS简写/优化技巧
  • 原文地址:https://www.cnblogs.com/surpassme/p/6512710.html
Copyright © 2011-2022 走看看