【问题标题】:selenium cannot find element that is visible on pageselenium 找不到页面上可见的元素
【发布时间】:2017-06-30 11:16:48
【问题描述】:

使用 Modelizer/Selenium 包运行 PHP、Laravel 和 Selenium。我有一个简单的表单(用 LaravelCollective 制作),没有隐藏元素或花哨的 javascript。

表格和测试代码贴在下面。

我明白了

1) can_search_by_city::testCanSearchByCity
Modelizer\Selenium\Exceptions\CannotFindElement: Cannot find element: Search by City isn't visible on the page

我已经查看了所有类似的问题。没有什么不是超级特定于另一个问题的。

这是我的代码,然后是我的表单...

    $this->visit('/login')
        ->type($this->User->email, 'email')
        ->type('secret', 'password')
        ->press('Login')
        ->see('Searches')
        ->type('queensbury ny','address')
        ->type('100','distance')
        ->wait(20)
        ->click('Search by City')
        ->see('Glens Falls #81')
    ;
}

然后是我的表格...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>    Welcome
 - Elk RV Parking</title>

    <!-- Fonts -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:100,300,400,700">

    <!-- Styles -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

    <style>
        body {
            font-family: 'Lato';
        }

        .fa-btn {
            margin-right: 6px;
        }
    </style>
</head>
<body id="app-layout">
    <nav class="navbar navbar-default navbar-static-top">
        <div class="container">
            <div class="navbar-header">

                <!-- Collapsed Hamburger -->
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
                    <span class="sr-only">Toggle Navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>

                <!-- Branding Image -->
                <a class="navbar-brand" href="http://localhost:8000">
                    Elk RV Parking
                </a>
            </div>

            <div class="collapse navbar-collapse" id="app-navbar-collapse">
                <!-- Left Side Of Navbar -->
                <ul class="nav navbar-nav">
                    <li><a href="http://localhost:8000/home">Home</a></li>
                </ul>

                <!-- Right Side Of Navbar -->
                <ul class="nav navbar-nav navbar-right">
                    <!-- Authentication Links -->
                                            <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                Ed Greenberg <span class="caret"></span>
                            </a>

                            <ul class="dropdown-menu" role="menu">
                                <li><a href="http://localhost:8000/logout"><i class="fa fa-btn fa-sign-out"></i>Logout</a></li>
                            </ul>
                        </li>
                                    </ul>
            </div>
        </div>
    </nav>

            <div class="container">
        <div class="row">
            <div class="col-md-10 col-md-offset-1">
                <div class="panel panel-default">
                    <div class="panel-heading">Welcome to Elk RV Parking</div>

                    <div class="panel-body">

                        <h1>Searches</h1>
                        <h2>by distance from a city or address</h2>
                        <form method="POST" action="http://localhost:8000/search/address" accept-charset="UTF-8" id="search-by-city"><input name="_token" type="hidden" value="CBphF66rzzk3MbYiNpLK2EsC1jxqVAt6XwRQA9vo">
                        <input name="_token" type="hidden" value="CBphF66rzzk3MbYiNpLK2EsC1jxqVAt6XwRQA9vo">

                        <div class="row">
                            <div class="col-md-8">Enter a city, state, a state, an address, anything that Google Maps would properly search</div>
                            <div class="col=md-4">Distance</div>
                        </div>
                        <div class="row">
                            <div class="col-md-8"><input size="50" name="address" type="text" value=""></div>
                            <div class="col=md-4"><input name="distance" type="text"></div>
                        </div>
                        <div>
                            <div><input type="submit" value="Search by City"></div>
                        </div>
                        </form>

                        <h2>byLodge Number</h2>
                        <form method="POST" action="http://localhost:8000/search/lodgenumber" accept-charset="UTF-8" id="search-by-lodge-number"><input name="_token" type="hidden" value="CBphF66rzzk3MbYiNpLK2EsC1jxqVAt6XwRQA9vo">
                        <input name="_token" type="hidden" value="CBphF66rzzk3MbYiNpLK2EsC1jxqVAt6XwRQA9vo">

                        <div class="row">
                            <div class="col-md-8">Enter a lodge number</div>
                        </div>
                        <div class="row">
                            <div class="col-md-8"><input size="10" name="lodge_number" type="text" value=""></div>
                        </div>
                        <div class="row">
                            <div class="col-md-8"><input type="submit" value="Search by Lodge Number"></div>
                        </div>
                        </form>



                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- JavaScripts -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.3/jquery.min.js" integrity="sha384-I6F5OKECLVtK/BL+8iSLDEHowSAfUo76ZL9+kGAgTRdiByINKJaqTPH/QVNS1VDb" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
    </body>
</html>

我的理解是 Selenium 通过它的值来寻找元素。在这种情况下,“按城市搜索”。我不明白为什么它不可见。

【问题讨论】:

  • 看看点击方法期望什么,也许它会寻找一个按钮或链接类型并且你实际上有一个输入类型,在这种情况下你可能需要使用 css 选择器来识别元素。

标签: php selenium phpunit


【解决方案1】:

您可能希望使用 press API 来执行所需的操作。因为,根据 Modelizer/Laravel-Selenium wiki 上可用的信息,click 会查找锚标记的名称、id 或文本属性。因此,您可以尝试以下操作:

$this->visit('/login')
    ->type($this->User->email, 'email')
    ->type('secret', 'password')
    ->press('Login')
    ->see('Searches')
    ->type('queensbury ny','address')
    ->type('100','distance')
    ->wait(20)
    ->press('Search by City')
    ->see('Glens Falls #81')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2021-08-15
    • 2018-12-09
    • 1970-01-01
    相关资源
    最近更新 更多