我正在尝试获取标签下的文字。那是瑞士格施塔德的Arduus。我尝试使用classname和xpath。
driver.findElement(By.className("chalet-details__title"));
String chaletTitle = driver.findElement(By.xpath("//div/h1[@class='chalet-details_title']")).getText();
但它给予NoSuchElementException
。 classname
有双下划线(__
)。是不是因为它不起作用?任何人都可以帮我这个吗?
<div class="col-md-12 col-sm-12 col-xs-12">
<h1 class="chalet-details__title">
<span class="chalet-details__title-property">Arduus</span>,
<a class="chalet-details__title-resort" href="/ski- resorts/switzerland/gstaad">Gstaad</a>,
<a class="chalet-details__title-country" href="/ski- resorts/switzerland">Switzerland</a>
</h1>
<div class="chalet-details__rating">
<div class="chalet-details__wrapper">
<span class="chalet-details__star" style="width: 108px;"></span>
<span class="chalet-details__mask"></span>
</div>
</div>
</div>
答案 0 :(得分:0)
您可以尝试以下内容:
driver.findElement(by.cssSelector("h1.chalet-details__title"))
我刚试过这个并且它与提供的html工作正常,如果这仍然不适合你,你能否验证页面上没有任何iframe。
答案 1 :(得分:0)
您的定位器都可以,但您可能需要等待DOM
中的元素出现:
WebDriverWait wait= new WebDriverWait(driver,20 );
String chaletTitle = wait.until(ExpectedConditions.presenceOfElementLocated(By.className("chalet-details__title"))).getText();
NoSuchElementException
的另一个原因:您的元素可能位于iframe
内,因此您需要在处理目标元素之前切换到该帧:
driver.switchTo().frame("iframeNameOrId");
如果它没有id
或name
的属性:
WebElement someFrame = driver.findElement(By.xpath("//iframe[@someAttr='someValue']"));
driver.switchTo().frame(someFrame);
答案 2 :(得分:0)
要获取h1标签下的所有文本,请使用定位器查找所有元素,如下所示:
List<WebElement> items = driver.findElements(By.cssSelector("h1.chalet-details__title > *")); //it will find all elements immediately under the h1 tag
现在,迭代元素。
完整代码:
List<WebElement> items = driver.findElements(By.cssSelector("h1.chalet-details__title > *"));
for(WebElement item : items){
System.out.println(item.getText());
}