使用Selenium通过Perl在Barclaycard Samrt Pay托管支付页面上发现查找元素

时间:2015-10-15 09:57:43

标签: perl selenium payment-gateway

我正在尝试在Perl中创建一个Selenium测试脚本(使用Selenium::Remote::Driver)来测试我的应用程序的结帐过程。我用Selenium IDE录制了它,并使用Perl webdriver格式插件导出它。我网站上的位工作正常,但当我来到Barclaycard HPP时,它找不到元素。我已经尝试了find_element和find_element_by的所有适用变体...但它不起作用。

$driver->find_element_by_id("card.cardNumber")->clear;
$driver->find_element_by_name("card.cardNumber")->clear;
$driver->find_element_by_xpath('//input[@id="card.cardNumber"]');
$driver->find_element_by_xpath('//*[@onkeypress="return blockNonNumberEvents(event)"]');

我能看到的唯一区别是ID和名称标签都包含点(即id = card.cardnumber)

<input type="text" class="inputField" id="card.cardNumber" onkeypress="return blockNonNumberEvents(event)" onkeyup="card_validateCcNumber(event, 'card', card_types, card_logos, card_subVariantExtras, card_subVariantExtrasPhrase)" onchange="card_validateCcNumber(event, 'card', card_types, card_logos, card_subVariantExtras, card_subVariantExtrasPhrase) ; card_doCCCheck('card')" name="card.cardNumber" value="" size="24" maxlength="23">

我已经验证了ID和NAME的标记值在页面上是唯一的,尝试通过xpath搜索其他标记。我能看到的唯一区别是NAME和ID字段中的点。

我知道这是一个非常具体的问题,但我希望其他人也能碰到它,找到修复/软糖!

1 个答案:

答案 0 :(得分:0)

这可能是由于card.cardNumber包含在引号中。当你这样做时,你告诉perl连接卡和cardNumber,所以你最终得到cardcardNumber。

另一方面,如果你使用单引号,那么:'card.cardNumber' perl将采用单引号之间的字面意思。从而为您提供所需的结束字符串“card.cardNumber”。