没有这样的元素异常。带有double__的班级名称

时间:2017-01-05 14:57:00

标签: selenium xpath selenium-webdriver automation

我正在尝试获取标签下的文字。那是瑞士格施塔德的Arduus。我尝试使用classname和xpath。

driver.findElement(By.className("chalet-details__title"));
String chaletTitle = driver.findElement(By.xpath("//div/h1[@class='chalet-details_title']")).getText();

但它给予NoSuchElementExceptionclassname有双下划线(__)。是不是因为它不起作用?任何人都可以帮我这个吗?

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

3 个答案:

答案 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");

如果它没有idname的属性:

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