SeleniumRC/Perl动态XPath选择器不工作
这是XPath语法的问题,而不是其他任何问题 我在一个网站上有多个产品页面,每个产品页面上都有多个产品。每个产品都有“添加到购物车”按钮的唯一ID。我正在尝试返回所有的唯一ID,以便我可以添加一些产品到包中。使用XPath搜索似乎是解决这一问题的正确方法。我有以下代码用于使用XPath查询HTML并返回唯一ID:SeleniumRC/Perl动态XPath选择器不工作,perl,xpath,selenium,selenium-rc,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; $
$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++;
}
正确返回quickview-link-PROD6945。第二次运行产生以下结果:
//a[@id!='quickview-link-PROD7029' and a[@id!='quickview-link-PROD6945' and img[@alt='Quick Shop']]]/@id
这会在我的SeleniumRC终端窗口中抛出一个错误:在会话中找不到元素[…xpath query..]
我知道可以使用索引(即在XPath查询的末尾添加一个[I]
)来访问页面上的元素,但是这在Selenium中并不适用
任何帮助都会很好。谢谢你抽出时间,
史蒂夫
img[@alt='Quick Shop']
]
]/@身份证
这在我的SeleniumRC中抛出了一个错误
终端错误窗口:元素
在会话上找不到[…xpath查询..]
如果您提供应用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'
)
]
你想要什么还不清楚。那些
@id
真的是uniques吗,还是你想得到uniques?看起来您正试图通过向XPath表达式顺序添加一个过滤器来“迭代”这个uniques ID。我认为这不是正确的方法。。。
//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'
)
]