SeleniumRC / Perl动态XPath选择器无法正常工作

时间:2011-01-21 09:33:37

标签: perl xpath selenium selenium-rc

这是XPath语法的问题,而不是其他任何问题。

我在网站上有多个产品页面,每个产品页面上都有多个产品。每个产品都有一个用于添加到购物车按钮的唯一ID。我正在尝试返回所有唯一的ID,以便我可以将几个产品添加到包中。使用XPath进行搜索似乎是正确的解决方案。我有以下代码用于使用XPath查询HTML并返回唯一ID:

$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终端窗口中出现ERROR错误:会话中找不到元素[..xpath query ..]。

我知道可能使用索引(即在XPath查询的末尾添加[i])来访问页面上的元素,但这不是Selenium中有用的东西。

任何帮助都会很棒。谢谢你的时间, 史蒂夫

1 个答案:

答案 0 :(得分:1)

//a[@id!='quickview-link-PROD7029' 
    and a[@id!='quickview-link-PROD6945' and
     

img [@ alt ='快速购物']                ]          ] / @ id

     

这在我的SeleniumRC中引发了错误   ERROR的终端窗口:元素   会话中找不到[..xpath query ..]

如果您提供应用XPath表达式的XML文档并解释您要选择的节点,那将非常有用。

没有这些必要的信息:

此问题的最明显原因是上述表达式正在查找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'
                                )
                            ]