Selenium Webdriver Java:元素不可见的异常

问题描述 投票:2回答:2

我是Selenium的新手。

我无法获得以下链接点击。

我得到一个元素不可见的异常:

org.openqa.selenium.ElementNotVisibleException: element not visible

对于

driver.findElement(By.xpath("//a[@href='/Home/Members']")).click();

我查看了stackoverflow,给出的解决方案对我不起作用。

我的代码如下:

我已经包含了一些我的理智检查,当链接点击时我会检查

public void clickMembersBenefitsFromHasLoggedInScreen() {

    if(driver.findElements(By.xpath("//a[@href='/Home/Members']")).size() != 0) {


            int okSize=driver.findElements(By.xpath("//a[@href='/Home/Members']")).size();

            System.out.println("ok_size "+okSize);

            System.out.println("Hello World "+driver.findElement(By.xpath("//a[@href='/Home/Members']")).getTagName());

            driver.findElement(By.xpath("//a[@href='/Home/Members']")).click();

        }else {
            System.out.println("[AerCardHomePageModel][Does Not Have Members Benefits Button]");
        }
}

它所采用的HTML页面如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>LoggedIn - AerCard</title>
    <link href="/Content/css?v=XHx4C0AbUkAQdcPtt7lhY9Ne4vCiFZm7FZ_iSLXgqSk1" rel="stylesheet"/>

    <script src="/bundles/modernizr?v=wBEWDufH_8Md-Pbioxomt90vm6tJN2Pyy9u9zHtWsPo1"></script>

    <script src='https://cdn.polyfill.io/v2/polyfill.min.js'></script>

</head>
<body>

    <div id="aerCardApp">
        <div class="" style="height:120px; background-color:white">

            <div class="pull-left" style="height:75%; width:15%; text-align:center; margin-left: 50px">
                <img style="max-height:100%" src="/img/aer lingus.JPG" />

            </div>
            <div class="pull-right" style="height:75%; width:15%; text-align:center; margin-right: 50px">
                <img style="max-height:100%" src="/img/boi.JPG" />

            </div>
        </div>
        <div class="" style="background-color:lightgray">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                </div>
                <div class="navbar-collapse collapse pull-right">
                        <ul class="nav navbar-nav navbar-right">

    </ul>

                </div>
            </div>
        </div>
        <div class="" style="height:120px; background-color:black">
            <div  class="container">
                <div class="row">
                    <div class="col-lg-6">
                        <h3 v-cloak style="color:white; padding-top:15px">Welcome {{Name}} {{AerCardId}}</h3>
                        <h4 v-cloak style="color:white;">Aer Credit Card Members benefit Section</h4>
                    </div>
                    <div v-if="MemberShipDate !== null" class="col-lg-6 pull-right">
                        <h3 style="color:white; padding-top:15px">Aer Credit Card Membership Date</h3>
                        <h4 style="color:white;">{{MemberShipDate}}</h4>
                    </div>
                </div>
            </div>
        </div>
        <div v-cloak class="container body-content">




<div class="row">
    <div class="col-lg-6">
        <h3>Login to your AerClub Account</h3>
        <div class="jumbotron" style="margin-top: 35px;">
            <div v-show="!isLoggedIn">
                <form id="loginForm" v-on:submit.prevent="onSubmit(this)">
                    <div class="alert alert-danger" v-if="formErrors.length">
                        <strong>Please correct the following error(s):</strong>
                        <ul>
                            <li v-for="error in formErrors">{{ error }}</li>
                        </ul>
                    </div>
                    <div class="form-group">
                        <label for="formTitle">Username/Email</label>
                        <input type="text" class="form-control" id="username" v-model:bind="username">
                        <label for="formFirstName">Password</label>
                        <input type="password" class="form-control" id="password" v-model:bind="password">
                    </div>
                    <button type="submit" class="btn btn-success pull-right">Login</button>
                </form>
            </div>
            <div v-show="isLoggedIn">
                <strong>Congratulations</strong>
                <p>You have successfully connected your</p>
                <p>AerClub rewards account with your Bank</p>
                <p>Of Ireland Aer Credit Card</p>
                <p><a href="/Home/Members" class="btn btn-primary  pull-right">Members Benefits &raquo;</a></p>
            </div>
        </div>
    </div>
    <div class="col col-lg-6">
        <img style="width:100%; padding-left:20px; padding-top:30px" src="/img/cc.png" />
    </div>

</div>

            <hr />
        </div>
        <div class="page-footer" style="height:50px">
            <div class="row">
                <div class="col-xs-12 col-sm-6" style="text-align:center; padding-top:10px">
                    <span class="txt-color-white"> © 2018 -  All Rights Reserved</span>
                </div>
            </div>
        </div>

    </div>

    <script src="/bundles/jquery?v=FVs3ACwOLIVInrAl5sdzR2jrCDmVOWFbZMY6g6Q0ulE1"></script>

    <script src="/bundles/bootstrap?v=2Fz3B0iizV2NnnamQFrx-NbYJNTFeBJ2GM05SilbtQU1"></script>

    <script src="/Scripts/Views/common.js"></script>

        <script src="/Scripts/bundle/LoggedIn.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script>

</body>
</html>
java selenium selenium-webdriver webdriverwait
2个回答
1
投票

根据HTML,您已经共享了与文本的链接,因为会员福利...在您登录后可见。因此,要识别WebElement,您必须将WebDriverWaitExpectedConditions子句elementToBeClickable一起诱导,如下所示:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.partialLinkText("Members Benefits"))).click();

0
投票

我不是专家,但我有类似的问题。特别是在hrefs中,它有时候找不到元素。有时它不会加载整页,因此您要查找的元素是不可见的。您可以尝试显式等待如下

WebDriverWait wait = new WebDriverWait(driver, 15);
WebElement elem = wait7.until(ExpectedConditions.visibilityOfElementLocated(By.id("")));

有时cssSellector工作得更好。你可以试试cssSellector。

© www.soinside.com 2019 - 2024. All rights reserved.