2010-11-16 2 views
4

Итак, используя Selenium, я хочу проверить ссылки на странице и посмотреть, открывают ли они новое окно. Они не являются ссылками javascript, а всего лишь базовым href «target = _blank». Я хочу убедиться, что только что открытое окно действительно загрузило страницу. Я могу сделать все скрипты, чтобы получить ссылку, но когда я тестирую заголовок страницы, я получаю страницу, на которую я тестирую, а не новое окно сверху. Как настроить таргетинг на это новое окно и проверить, загружена ли эта страница?Selenium href blank New Window test

благодарит

ответ

3

Следующие работал для меня с формой с целью атрибута = «_ пустой», который отправляет запрос 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> 
+0

Хорошее решение, но я [не могу заставить его работать в Selenium IDE] (http://stackoverflow.com/questions/10092693/result-is-null-error-when-working-around-blank-deficiency-in- селен-ида). – l0b0

1

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

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

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

+0

Я запускаю RC в php. Поэтому я могу запустить $ this-> getAllWindowNames(), чтобы получить имя окна, но Selenium рандомизирует имя недавно открытой вкладки/окна. В 2-оконном массиве он возвращает «selenium_main_app_window» и «selenium_blank66115». Я попытался установить целевой атрибут в разметке ссылки, но Selenium по-прежнему считает цель пустой и вставляет рандомизированное имя. – hogsolo

1

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

public function testMyTestCase() { 
    $this->open("/"); 
    $this->click("link=Sign in"); 
    $this->waitForPageToLoad("30000"); 
    $this->type("email", "[email protected]"); 
    $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()); 
     } 
    } 

    }