【问题标题】:Selenium browser window sizeSelenium 浏览器窗口大小
【发布时间】:2016-03-07 08:59:14
【问题描述】:

我是使用硒的新手。我已经下载了 Selenium 独立服务器并通过键入成功运行它

java -jar selenium-server-standalone-2.14.0.jar

进入命令行。

运行后

 phpunit.bat

在命令行中,我的所有测试都将按预期通过,除非我手动最大化在测试过程中自动打开的 Firefox 浏览器窗口。

在测试运行时,当 Firefox 浏览器窗口打开时,如果我在登录测试运行时没有最大化该窗口,那么该测试将失败并以某种方式重定向到我网站上的意外页面。如果我在测试完成之前最大化窗口,“登录”按钮会按预期被点击,正确的页面被加载,测试通过。

因此,我想知道是否有办法更改某处的设置,以便 Firefox 浏览器在测试运行时以最大化打开?

我在谷歌上搜索并发现了一些可能有帮助的各种代码 sn-ps,但我不确定这段代码的 PHP 版本在哪里,或者我正在使用的 Selenium 版本在哪里放置一些类似的代码(Selenium 独立服务器):

# repositioning and resizing browser window:
driver.manage.window.move_to(300, 400)
driver.manage.window.resize_to(500, 800)
driver.manage.window.maximize

或者这是 C#,但我需要 PHP,但不知道在哪里可以找到正确的代码或将它放在哪里:

driver.Manage().Window.Maximize();   

这是我的测试/SeleniumTest.php 文件中有关登录 Selenium 测试的代码(使用 Laracasts/Integrated):

<?php

use Laracasts\Integrated\Extensions\Selenium;
use Laracasts\Integrated\Services\Laravel\Application as Laravel;

class SeleniumTest extends Selenium
{
    use Laravel;
    /**
     * Tests to see if the login page loads
     */
    public function testToSeeIfLoginLoads()
    {
        $this->visit('/login')
            ->see('Login')->see('Email Address')->see('Password')
            ->type('myemail@email.com', 'email')->type('mypassword', 'password')
            ->waitForElement('log_in')
           ->click('log_in')
            ->waitForElement('table_summary')
            ->see('Complete Course Summary');
    }

【问题讨论】:

  • 听起来您以脆弱的方式构建了登录测试,因此窗口内按钮的位置很重要。您应该考虑在 DOM 元素上调用点击事件,而不是依赖点击位置 X,Y。
  • @MikeBrant 这是一个符合问题的逻辑解决方案,但我刚刚更新了上面的问题以包括失败的登录测试。据我所知,无论按钮在页面上的哪个位置,都应该被点击,因为它是由 id "log_in" 引用的

标签: php unit-testing firefox selenium laravel-5.1


【解决方案1】:

我没有使用 Laravel,我使用的是经典的 phpunit + selenium RC 和/或 webdriver,这对我来说适用于两种实现,在打开 url 之后,如果我只想要这个用于特定测试:

$this->open("/");
$this->getEval("window.resizeTo(1225, 996); window.moveTo(0,200);");
//or $this->windowMaximize();

或者对于 facebook-webdriver:

$this->driver->get('myurl/');
$this->driver->manage()->window()->setSize(new WebDriverDimension(1225, 996));

如果您希望它用于所有测试,您应该找到 setUp 方法并将其放在那里。在您的情况下,对于特定测试,this should work:

$this
  ->visit('/')->session->window($this->session->window_handle())
  ->postSize(['height' => 996, 'width' => 1225]);

要导入WebDriverDimensions添加

use Facebook\WebDriver\WebDriverDimension;

更多使用信息,here

【讨论】:

  • 我可能需要一些时间来研究这个问题,但感谢您的回答。看起来很有希望:)
  • WebDriverDimension 来自哪个命名空间?
  • use Facebook\WebDriver\WebDriverDimension;
【解决方案2】:

您是否尝试过覆盖 setUpPage 函数?

public function setUpPage()
    {
         $this->currentWindow()->maximize();
    }

【讨论】:

  • 把它放在 tests/SeleniumTest.php 中没有任何作用。也许有不同的类似方法?
  • 我认为这个解决方案的问题在于它没有扩展 Laracasts/Integrated,但可能类似于 Selenium2TestCase
猜你喜欢
  • 2017-07-27
  • 2015-04-20
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2011-11-19
  • 2012-05-23
相关资源
最近更新 更多