首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用selenium中的css选择器从表中获得正确的值

无法使用selenium中的css选择器从表中获得正确的值
EN

Stack Exchange QA用户
提问于 2018-10-21 06:29:14
回答 2查看 541关注 0票数 0

我试图使用以下代码获取针对Total显示的值:

代码语言:javascript
复制
driver.get("https://www.cricbuzz.com/live-cricket-scorecard/20137/sl-vs-eng-4th-odi-england-tour-of-sri-lanka-2018");

String textextras = driver.findElement(By.cssSelector("div[class='cb-col cb-col-100 cb-ltst-wgt-hdr']")).findElement(By.cssSelector("div:nth-last-child(3) div:nth-child(2)")).getText();
System.out.println(textextras);

String textsum = driver.findElement(By.cssSelector("div[class='cb-col cb-col-100 cb-ltst-wgt-hdr']")).findElement(By.cssSelector("div:nth-last-child(2) div:nth-child(2)")).getText();
System.out.println(textsum);

输出:

19名击球员RB4S6SSR

谁能帮我一下,为什么它不工作文本和,但它工作良好的文本附加变量?

EN

回答 2

Stack Exchange QA用户

发布于 2018-10-21 18:49:29

我假设您正在尝试从第一个表中选择总计值。简而言之,失败的原因是您的css表选择器不够具体,而且它选择了多个表元素,这会导致不希望得到的结果。

就你而言,我建议你做以下工作:

  1. 如果您想要处理单个元素,请确保您正在制定的选择器是唯一的。用于选择表的类对于4个表来说是相同的,这也是您得到不希望得到的结果的原因之一。

div[class='cb-col cb-col-100 cb-ltst-wgt-hdr']选择4个表,而不是只选择第一个表。检查铬中选择器的结果数。

  1. 只要有可能,使用id定位器。它们速度更快,而且大多是独一无二的。我告诉您这是因为您的表有一个带有id定位器的父表,使用它可以帮助您使用唯一的定位器来选择表。

这是第一个表- #innings_1 > div:first-child的唯一选择器。

  1. 如果要多次使用元素,最好将其存储到变量中。要使用表元素两次。下面是一个例子。(2) driver.findElement(By.cssSelector("div类=‘cb- col-100 cb-ltst-wgt-hdr’"));表= table.findElement(By.cssSelector("div:nth-last-child(2) div=table.findElement(By.cssSelector(“div:nth-last-child(2)div:nth-child(2)).getText();System.out.println("textextras = "+ textextras );String =table.findElement(By.cssSelector(”div:nth-last-child(2)div:nth-child(2)“).getText();
  2. 使用css定位器练习更多。

这是修改过的代码。我刚换了桌子的选择器!

代码语言:javascript
复制
    WebElement table = driver.findElement(By.cssSelector("#innings_1 > div:first-child"));
    String textextras = table.findElement(By.cssSelector("div:nth-last-child(3) div:nth-child(2)")).getText();
    System.out.println("textextras = "+textextras);
    String textsum = table.findElement(By.cssSelector("div:nth-last-child(2) > div:nth-last-child(2)")).getText();
    System.out.println("textsum = "+textsum);
票数 0
EN

Stack Exchange QA用户

发布于 2018-11-20 19:42:50

在过去,.getText()也有意想不到的行为,所以我建议使用element.getAttribute("innerText"),如所描述的这里。当结果字符串为空时,它解决了我的情况。

我使用element.findElement(By.xpath(".//*[@class='title']")).getAttribute("innerText");查找类等于“title”的任何节点并获取该标题。

对于您的表,可以在xpath ("//div[contains(@class,'cb-scrd-itms')]/div[last()]")后面使用,它定位所有行并接受最后一个子div。

票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/36112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档