Перейти к содержимому

Публикации -AdyOS-

6 публикаций создано -AdyOS- (учитываются публикации только с 20 апреля 2023)


#83396 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 21 января 2011 - 14:22 в Selenium - Functional Testing

Я бы предположил что событие вами вызываемое привязано не к span а к другому элементу, который содежит span, и "кликать" возможно стоит попробовать по нему...

Согласен предложение разумное, в итоге на самом деле оказывается все сложнее чем кажется =) Ох уж эти жаваскриптовые фреймворки =) Событие в данном случае должен поймать компонент (аля комбобокс)... Единственно решение, которое пока тут вижу это управление передвижением мышки и посыл сообщения типа mouseClickAt(). Но пока мышку не удалось заставить двигаться =))



#83393 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 21 января 2011 - 12:46 в Selenium - Functional Testing

Вообщем, getXpathCount победить не удалось, решил пойти другим путем, более удачным =))) Пришлось воспользоватся средствами фреймворка приложения, для получения нужных идентификаторов для дальнейшей работы. Но тут возникли новые косяки - почему селениумовский клик по локатору в котором указано явное id ни к чему не приводит... Более того поведение вовсе интересное итак есть
...
  <span id="span_random_id">text</span>
...
Далее хочется кликнуть по спану:
...
$this->click("span_random_id"); //по логам видно что кликает и пишет в ответе, мол все ОК. В реале эффекта 0
//пробуем дальше другим способом - посылаем сообщение
$this->fireEvent("span_random_id", "click"); //эффект тот же...
// а вот так уже интереснее
$this->fireEvent("span_random_id", "mouseover");  //аллилуя виден эффект - подсвечивается как и должен, попробуем кликнуть теперь
$this->fireEvent("span_random_id", "click"); // фигушки =(
//и даже так не помогает:
$this->fireEvent("span_random_id", "mouseover"); 
$this->fireEvent("span_random_id", "mousedown"); 
$this->fireEvent("span_random_id", "mouseup"); 
...
В итоге из всего теста проходит только одно сообщение mouseover... Тупик какой-то :help:



#83351 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 20 января 2011 - 13:06 в Selenium - Functional Testing

IFrame - это практически другое окно, соответственно, что бы работать с ним, его нужно сначала выбрать, затем проверить находится ли подсчитываемый объект.
Если находится, значит все локаторы указаны верно и можно уже использоваться getXpathCount.
Искомый элемент точно находится\доступен после selectFrame?

Полностью согласен с выше сказанным. Но вот как раз все проблемы и начинаются после того как выбираем нужный iframe - после того как его выбрали, не один элемент по xpath вообще не находится... В том что он есть и находится в данном фрейме, сомнений нет - смотрю сорец страницы в IE Dev Toolbar. Единственно что удалось получить и то тоже как-то странно:
$this->selectFrame("//iframe[@id='frame_id']");
$this->isElementPresent("//body"); //return true
// у body есть атрибут key='body_name'
$this->isElementPresent("//body[@key='body_name']"); //return false

Одним словом после выбора фрейма, достучатся до чего-нибудь внутри возможности нет... Причем $this->isElementPresent("//body"); вот это сдается мне выдает true по корневому body...



#83342 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 20 января 2011 - 11:53 в Selenium - Functional Testing

А можно взглянуть на код теста и на код выбранного фрейма?

На самом деле во фрейме оооочень много всякого лишнего шлака, и выкладывать его смысла нет, но приведу примерную структурку его:
<iframe id='my_frame'>
 <html><head><body>
  // дальше идет куча div (по сути страницы)
  <div id='my_page'>
  //вот здесь уже div комбобокса со структурой описнанной в первом посте. 
   <div class='combobox-1'>
     <span class='combobox-item-selected' id='combobox-item-1'>value1</span>
      ....
     <span class='combobox-item' id='combobox-item-n'>valueN</span> 
   </div>
  </div>
 </body></head> <html>
</iframe>
Код php выглядит элементарно, примерно так (код слегка изменил т.к. нашел новые приколы, см. комментарий к коду):
<?php
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class MyTest extends PHPUnit_Extensions_SeleniumTestCase
{
	public function setUp()
	{
		$this->setBrowser('*iexplore'); //iexplore
		$this->setBrowserUrl('http://localhost');
		$this->setSleep(0,1);
	}

	public function Log($message, $type = "INF") {
		if(isset($message)) {
			print "LOG " .$type. ": ".$message."\n";
		}
	}
	public function foo () {
	 if($this->isElementPresent("//div[@id='my_page']")) {
            $this->Log("Element present"); 
            $this->Log("Xpath count: ".$this->getXpathCount("//div[@id='my_page']")); //return 0
         }
         if($this->isElementPresent("my_frame")) {
            $this->Log("Frame present");
            $this->selectFrame("my_frame");
            $this->Log("divs Xpath count: ".$this->getXpathCount("//div")); just for test, return 0
            $this->Log("Xpath count: ".$this->getXpathCount("//div[@id='my_page']")); return 0
            /* Здесь проверка на наличие элемента уже возвращает false*/
	    if($this->isElementPresent("//div[@id='my_page']")) { 
                $this->Log("Element present");
                $this->Log("Xpath count: ".$this->getXpathCount("//div[@id='my_page']"));
            } else {
                    $this->Log("Element not present");
            }
         } else {
            $this->Log("Frame not present");
         }
        }
	public function tearDown()
	{
		$this->stop();
	}

	public function testMyTest()
	{
		$this->open("/");
		$this->waitForElementPresent("my_page");
		$this->foo();
	}
}
?>



#83315 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 19 января 2011 - 19:49 в Selenium - Functional Testing


...попробовать сделать вот так getXpathCount("//iframe[@id='1']//div[@class='combobox-1']") уже получаем 0.
Может, кто сталкивался с таким, и знает как побороть такую траблу =)

1)перключится в фрейм $this->selectFrame("");
2)потом только считать xpath.
таким образом пробовали?

Пробовал, так же самая ситуация, не считает ни в какую что внутри фрейма =(



#83313 Selenium RC + PHPUnit getXpathCount выдает неверное значение

Отправлено автор: -AdyOS- 19 января 2011 - 19:17 в Selenium - Functional Testing

Всем привет!
Столкнулся с проблемой, что никак не удается получить количество вложенных элементов по указанному xpath
Итак что имеем:
1. ОС винда ХР
2. Selenium RC 1.0.3 PHPUnin 3.5.9 и последние апач с php
3. Приложение, которое проверяется написано на js фреймворке
4. Загружаем исключительно в эксплорере

После загрузки приложения имеем документ вида:
<html>
  ...
  <iframe id=1>
    <html>
     //куча div и span
    </html>
  </iframe>
  <iframe id=n>...</iframe>
</html>
Одним словом документ представляет собой кучу вложенных iframe, где нас интересует только один.
Задача состоит в том чтобы упралять combobox, который из себя представляет нечто следующее
<div class='combobox-1'>
 <span class='combobox-item-selected' id='combobox-item-1'>value1</span>
 ....
 <span class='combobox-item' id='combobox-item-n'>valueN</span> 
</div>
Проблема заключается в следующем - по xpath проверяю что элемент есть (isElementPresent("//div[@class='combobox-1']") а вот getXpathCount("//div[@class='combobox-1']") возвращает 0
Как мне кажется проблема связана с тем что используется довольно сложная структура документа, а так же то что все необходимое находится в iframe. Единственно что удается получить от getXpathCount("//iframe[@id='1']") = 1, а если попробовать сделать вот так getXpathCount("//iframe[@id='1']//div[@class='combobox-1']") уже получаем 0.
Может, кто сталкивался с таким, и знает как побороть такую траблу =)