【问题标题】:selenium c# - How to get span tag text under a divselenium c# - 如何在 div 下获取 span 标签文本
【发布时间】:2017-10-30 01:41:47
【问题描述】:
<div id="targetSummaryCount" class="large-text" data-reactid=".0.0.0.3.0.0.1.0.0.0.0.$target_key_30.1.1.0">
<span data-reactid=".0.0.0.3.0.0.1.0.0.0.0.$target_key_30.1.1.0.0">0</span>
<span data-reactid=".0.0.0.3.0.0.1.0.0.0.0.$target_key_30.1.1.0.1">/</span>
<span data-reactid=".0.0.0.3.0.0.1.0.0.0.0.$target_key_30.1.1.0.2">20</span>
</div>

我想使用 div id 'targetSummaryCount' 从上述 html 中获取 '0' 和 '20' 值。有没有办法在 Selenium C# 中不使用 xpath 来做到这一点?

【问题讨论】:

    标签: c# html css selenium


    【解决方案1】:

    您可以使用 CSS 选择器:

    driver.FindElements(By.CssSelector("#targetSummaryCount > span"))
    

    这将匹配元素正下方的所有span 元素与id="targetSummaryCount"

    【讨论】:

    • .get(0) 将返回“0”,.get(2) 将返回“20”。
    【解决方案2】:

    我已经用 Java 发布了解决方案。请将其转换为 C#

        WebElement divSummary = driver.findElementById("targetSummaryCount");
        List<WebElement> targetKeys = divSummary.findElements(By.tagName("span"));
        // For  getting first and last element
        targetKeys.get(0);
        targetKeys.get(targetKeys.size()-1);
    
        // For maintaining queue of elements with text 0 or 20
        HashMap <Integer, List<WebElement>> elementmap = new HashMap <Integer, List<WebElement>>();
        List<WebElement> webElements1 = new ArrayList<WebElement>();
        List<WebElement> webElements2 = new ArrayList<WebElement>();
        for (WebElement elem : targetKeys){
            if(elem.getText().trim().equals("0")){
                webElements1.add(elem);
            }
            else if (elem.getText().trim().equals("20")){
                webElements2.add(elem);
            }
        }
        elementmap.put(0,webElements1);
        elementmap.put(20,webElements1);
        // elementmap.get(0) contains all span tag under target Summary Count div tag
        // elementmap.get(20) contains all span tag under target Summary Count div tag
    

    【讨论】:

      【解决方案3】:

      使用 XPath 获取“0”和“20”:

      string value_00 = driver.FindElementByXPath("//div[@id='targetSummaryCount']/span[1]").Text;
      string value_20 = driver.FindElementByXPath("//div[@id='targetSummaryCount']/span[3]").Text;
      
      // or
      var elements = driver.FindElementsByXPath("//div[@id='targetSummaryCount']/span");
      string value_00 = elements[0].Text;
      string value_01 = elements[2].Text;
      

      还有一个 Css 选择器:

      string value_00 = driver.FindElementByCssSelector("#targetSummaryCount > span:nth-child(1)").Text;
      string value_20 = driver.FindElementByCssSelector("#targetSummaryCount > span:nth-child(3)").Text;
      
      // or
      var elements = driver.FindElementsByCssSelector("#targetSummaryCount > span:nth-child(odd)");
      string value_00 = elements[0].Text;
      string value_01 = elements[1].Text;
      

      【讨论】:

      • 不使用xpath可以吗?
      • @Nandu PH,是的,您也可以使用 CSS 选择器。我已经用一个例子更新了答案。
      【解决方案4】:

      你可以试试这个。

              var spanCount = driver.FindElements(By.XPath("//*[@id='targetSummaryCount']/span")).Count;
              var myResult = "";
              for (int spanIndex = 0; spanIndex < spanCount; spanIndex++)
              {
                  var spanText = driver.FindElement(By.XPath("//*[@id='targetSummaryCount']/span[" + spanIndex + "]")).Text;
      
                  if (spanText != "/")
                  {
                      myResult += "span:" + spanIndex + " spanText:" + myResult;
                  }
              }
      

      【讨论】:

        【解决方案5】:

        你可以试试这个。获取作为 id 为 targetSummaryCount 和文本为 020 的 div 的子元素的 span。

        var span_00 = driver.FindElementByXPath("//div[@id='targetSummaryCount']/span[text()='0']");
        
        var span_20 = driver.FindElementByXPath("//div[@id='targetSummaryCount']/span[text()='20']");
        

        【讨论】:

          猜你喜欢
          • 2016-12-04
          • 1970-01-01
          • 1970-01-01
          • 2011-02-10
          • 2023-03-05
          • 2020-05-25
          • 1970-01-01
          • 2021-07-26
          • 2019-05-20
          相关资源
          最近更新 更多