[英]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为targetSummaryCount
且0
或20
的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.