Selenium href blank Новое окно теста - PullRequest
4 голосов
/ 16 ноября 2010

Итак, используя Selenium, я хочу протестировать ссылки на странице и посмотреть, открываются ли они в новом окне.Это НЕ ссылки на javascript, просто базовая ссылка "target = _blank".Я хочу убедиться, что недавно открытое окно действительно загрузило страницу.Я могу выполнить все сценарии, чтобы щелкнуть ссылку, но когда я проверяю заголовок страницы, я получаю страницу, на которой проверяю, а не новое окно, которое находится сверху.Как настроить таргетинг на это новое окно и проверить, загружена ли эта страница?

спасибо

Ответы [ 3 ]

3 голосов
/ 01 февраля 2011

Следующее работает для меня с формой с атрибутом target = "_ blank", которая отправляет запрос POST в новом окне:

// Open the action in a new empty window
selenium.getEval("this.page().findElement(\"//form[@id='myForm']\").target='my_window'");
selenium.getEval("selenium.browserbot.getCurrentWindow().open('', 'my_window')");

//The contents load in the previously opened window
selenium.click("//form[@id='myForm']//input[@value='Submit']");
Thread.sleep(2000);

//Focus in the new window
selenium.selectWindow("my_window");
selenium.windowFocus();
/* .. Do something - i.e.: assertTrue(.........); */

//Close the window and back to the main one
selenium.close();
selenium.selectWindow(null);
selenium.windowFocus();

HTML-код будет похож на:

<form id="myForm" action="/myAction.do" target="_blank">
    <input type="text" name="myText" value="some text"/>
    <input type="submit" value="Save"/>
</form>
1 голос
/ 16 ноября 2010

Основываясь на рандомизации имен, я думаю, что могу пройтись по именам окон и выбрать неизвестное.Это работает, но не проверено полностью ...

 public function testMyTestCase() {
  $this->open("/");
  $this->click("link=Sign in");
  $this->waitForPageToLoad("30000");
  $this->type("email", "xxx@gmail.com");
  $this->type("password", "xxx");
  $this->click("login");
  $this->waitForPageToLoad("30000");
  $this->click("link=Resources");
  $this->waitForPageToLoad("30000");
    $this->click("link=exact:http://100pages.org/");

    $cc = $this->getAllWindowNames();
    foreach($cc as $v ) {           
        if (strpos($v, "blank")) {                  
            $this->selectWindow($v);
            $this->waitForPageToLoad("30000");          
            $this->assertRegExp("/100/", $this->getTitle());
        }
    }

  }
1 голос
/ 16 ноября 2010

Вы отметили вопрос RC, поэтому я предполагаю, что это не Selenium IDE.

Вы можете использовать что-то вроде selenium.selectWindow или selenium.selectPopUp или selenium.windowFocus для нацеливания на новое окно.

Техника, которую я нахожу весьма полезной, состоит в том, чтобы использовать Selenium IDE для захвата сценария, а затем выбрать «Параметры», а затем требуемый формат программирования (Java, C # и т. Д.), А затем использовать этот фрагмент в качестве основы теста RC.

...