zoukankan      html  css  js  c++  java
  • [Selenium With C#基础教程] Lesson-03 超级链接

    作者:Surpassme

    来源:http://www.jianshu.com/p/83809943e751

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

    超级链接或链接是Web页面的基本元素之一,而通过超级链接使得万维网可以互联互通。一个典型的链接如下所示:

    HTML源码如下所示:

    <a href="index.html" id="Selenium_id" class="nav" data-id="123" style="font-size: 14px;">Selenium</a>
    • 通过文字点击链接

    在Selenium中通过文字点击链接是最直接的一种方式,如下所示:

    driver.FindElement(By.LinkText("Selenium")).Click();
    • 通过元素ID点击链接 
    driver.FindElement(By.Id("Selenium_id")).Click();

    如果你正在测试一个多语言的网站,使用ID来进行定位或许是一种比较可行的方案,而你不需要写像下面的测试脚本:

    //英语和中文两个方法
               bool IsEnglish(int flag)
               {
                   if (flag==1)
                       return true;
                   return false;
               }
               bool IsChinese(int flag)
               {
                   if (flag == 2)
                       return true;
                   return false;
               }
              [TestMethod]
            private void TestMulLanguage()   
              {
                  int indicator = 1;
                  if (IsEnglish(indicator))
                  {
                      driver.FindElement(By.LinkText("English")).Click();
                  }
                  else if (IsChinese(indicator))
                  {
                      driver.FindElement(By.LinkText("中文")).Click();
                  }
                  else
                  {
                      driver.FindElement(By.LinkText("English")).Click();
                  }
     }
    • 通过部分文字点击链接

    当需要点击的链接很长或动态生成,我们可以使用部分文字点击链接,如下所示:

    driver.FindElement(By.PartialLinkText("Selen")).Click();
    • 使用XPath点击链接 

    下面的示例假设需要点击的链接位于<p>tag下面:

    driver.FindElement(By.XPath("//p/a[text()='Selenium']")).Click();

    在该示例中,或许有人会问,使用LinkText不是更简单直观,而且也不会出错,为什么还要使用复杂的XPath进行定位了?我们来看看如下的示例:

    在该页面中,有两个“点击”的链接,HTML源码如下: 

    <div>
          FirstSample 
         <a href="index.html">点击</a>
    </div>
    <div>
         SecondSample 
         <a href="index.html">点击</a>
    </div>

    如果在测试中需要点击第二个链接,如果还是按照以下的代码进行点击,将不是你想要的结果。

    driver.FindElement(By.LinkText("点击")).Click();

    此时如果使用XPath就能很好的解决这个问题,代码如下:

    driver.FindElement(By.XPath("//div[2]/a[text()='点击']")).Click();
    • 通过nth进行点击多个相同文字的链接

    拥有多个相同文字的链接在Web并不罕见,而Selenium默认通常只会选中定位到的第一个,而你如果想选择第二个或nth,如何实现?三个链接拥有相同的文字标签,示例如下:

    HTML源码如下:

        <p>
            你如何看待自动化测试的重要性和价值?
            <a href="index.html">显示回答</a>
            <br />
            你为什么没有在项目中使用自动化?
            <a href="index.html">显示回答</a>
            <br />
            如果你的项目采用了自动化测试,将会有哪些提升?
            <a href="index.html">显示回答</a>
        </p>

    如果要点击第二个链接,可使用以下代码:

    ReadOnlyCollection<IWebElement> links = driver.FindElements(By.LinkText("显示回答"));
    links[1].Click();

     FindElements会返回一个满足条件的web元素集合(也有称数组)。在C#中,集合的开始标识从0开始,所以点击第二个链接,则标识应该1。

    • 通过CssSelector进行点击nth链接

    以下示例是点击上一个示例第三个显示回答代码

    driver.FindElement(By.CssSelector("p>a:nth-child(5)")).Click();
    • 获取链接的数据属性

    一旦一个Web元素被确定,我们就可以获取到该元素的一些属性,如下所示:

        //获取链接地址
        driver.FindElement(By.LinkText("Selenium")).GetAttribute("href");
        //获取元素id
        driver.FindElement(By.LinkText("Selenium")).GetAttribute("id");
        //获取元素文本
        string text=driver.FindElement(By.LinkText("Selenium")).Text;
        //获取元素的TagName
       string tagName = driver.FindElement(By.LinkText("Selenium")).TagName;
    • 在新窗口中打开链接

    点击以下的链接,将在新窗口中打开一个链接或选项卡,如下所示:

    <a href="http://www.cnblogs.com" target="_blank">在新窗口中打开博客园</a>

    尽管我们可使用SwithcTo()方法切换到最新窗口,代码如下所示:

                //打开新窗口
                driver.FindElement(By.Id("newWindows")).Click();
                //切换到窗口
                driver.SwitchTo().Window(driver.WindowHandles[1]);
                driver.FindElement(By.Id("zzk_q")).SendKeys("Selenium");
                driver.FindElement(By.XPath("//div[@class='side_search'][1]/input[2]")).Click();
                driver.Close();
                //返回之前的窗口
                driver.SwitchTo().Window(driver.WindowHandles[0]);
    

    当然也可以更简单的方法来实现在一个浏览器窗口中进行测试,使用一个变量(currentUrl)来存放初始的地址,代码如下:

                string currentUrl = driver.Url;
                //获取新窗口的链接地址
                string newWindowUrl = driver.FindElement(By.Id("newWindows")).GetAttribute("href");
                //切换到新窗口
                driver.Navigate().GoToUrl(newWindowUrl);
                driver.FindElement(By.Id("zzk_q")).SendKeys("Selenium");
                driver.FindElement(By.XPath("//div[@class='side_search'][1]/input[2]")).Click();
                //返回之前初始的窗口
                driver.Navigate().GoToUrl(currentUrl);

    以上就是针对Selenium Web测试针对链接进行定位测试的一些方法总结,在实际测试过程,可通过各种方法灵活使用。

    作者:Surpassme

    来源:http://www.cnblogs.com/surpassme/

    声明:转载请在文章页面明显位置给出原文连接,谢谢。

     

     

  • 相关阅读:
    Linux基础巩固--Day4--文本处理
    Linux基础巩固--Day3--用户组及权限操作
    2020撸python--argparse列出D盘目录详情
    2020撸python--socket编程
    Linux基础巩固--Day2--文件操作
    Linux基础巩固--Day1--背景介绍
    Let's Go -- 初始go语言
    ValueError: Related model 'users.UserProfile' cannot be resolved
    半虚拟化驱动virtio-Windows
    virt-install 创建虚拟机
  • 原文地址:https://www.cnblogs.com/surpassme/p/6487163.html
Copyright © 2011-2022 走看看