繁体   English   中英

Selenium C#-如何在div下获取span标签文本

[英]selenium c# - How to get span tag text under a div

<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'值。 没有使用xpath在Selenium C#中有什么方法可以做到这一点吗?

您可以使用CSS选择器:

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

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

我已经用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

要使用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;

你可以试试看

        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;
            }
        }

你可以试试看 获取范围为ID为targetSummaryCount020的div的子级。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM