SeleniumRC / Perl динамический XPath селектор не работает - PullRequest
0 голосов
/ 21 января 2011

Это вопрос к синтаксису XPath больше, чем что-либо еще.

У меня есть несколько страниц товара на сайте, на которых есть несколько товаров на страницах каждого товара.Каждый продукт имеет уникальный идентификатор для кнопки «Добавить в корзину».Я пытаюсь вернуть все уникальные идентификаторы, чтобы я мог добавить пару продуктов в сумку.Поиск с помощью XPath кажется правильным решением для этого.У меня есть следующий код для запроса HTML с XPath и возвращения уникальных идентификаторов:

$XPATH_COUNT = $sel->get_xpath_count("//div[\@class='quick-info-link']/a");

@my_array;
$my_array[0] = $sel->get_attribute("//div[\@class='quick-info-link']/a/\@id");
print $my_array[0];
$count = 0;

while( $count < $XPATH_COUNT )
{
    $arrayCount=0;
    $a = "//";

    foreach( @my_array )
    {
        $tmp = "a[\@id!='" . $my_array[$arrayCount] . "' and ";
        $b .= $tmp;
        $d .= "]";
        $arrayCount++;
    }

    $c = "img[\@alt='Quick Shop']";
    $e = $c . $d . "/\@id";
    $xpath_query = $a . $b . $e;
    $my_array[$count] = $sel->get_attribute($xpath_query);
    $count++;
}

Выход первого запуска этого запроса XPath выглядит так:

//a[@id!='quickview-link-PROD7029' and img[@alt='Quick Shop']]/@id

Что правильно возвращает quickview-link-PROD6945.Второй запуск приводит к следующему:

//a[@id!='quickview-link-PROD7029' and a[@id!='quickview-link-PROD6945' and img[@alt='Quick Shop']]]/@id

, который выдает ошибку в моем окне терминала SeleniumRC с ошибкой: элемент [..xpath query ..] не найден в сеансе.о возможном использовании индексов (т.е. добавление [i] в конец запроса XPath) для доступа к элементам на странице, однако это не то, что мне помогло в Selenium.

Любая помощьбыло бы замечательно.Спасибо за ваше время, Стив

1 Ответ

1 голос
/ 21 января 2011
//a[@id!='quickview-link-PROD7029' 
    and a[@id!='quickview-link-PROD6945' and

img [@ alt = 'Quick Shop']]] / @ id

В результате в моем терминальном окне SeleniumRC произошла ошибка ERROR: Element [..xpath query ..] не найден в сеансе

Было бы очень полезно, если бы вы предоставили XML-документ, к которому применено выражение XPath, и объяснили, какие узлы вы хотите выбрать.

Безэта необходимая информация:

Наиболее очевидная причина этой проблемы состоит в том, что приведенное выше выражение ищет элементы a, которые имеют дочерний элемент a с некоторым свойством.

Обычно элемент a не имеет a потомков.

То, что вы действительно хотите, это что-то вроде :

//a[@id != 'quickview-link-PROD7029' 
  and 
   @id != 'quickview-link-PROD6945' and img[@alt='Quick Shop']
   ]/@id 

Это может бытьнемного упростил:

//a[img[@alt='Quick Shop']/@id
                           [not(. = 'quickview-link-PROD7029' 
                               or 
                                . =  'quickview-link-PROD6945'
                                )
                            ]
...