2016-05-09 54 views
0

我在下面的链接的搜索结果列表,并想知道我如何能使用动态的XPath如何使用Selenium Webdriver识别搜索结果中的单个控件?

http://www.bigbasket.com/cl/fruits-vegetables/?nc=nb

我能够得到显示的产品名称的列表标识各个控件使用下面的线

List<WebElement> productResults = browser.findElements(By.xpath("//*[contains(@id,'product')]/div[2]/span[2]/a")); 

我能够打印使用下面的代码在第1页中显示的产品名称,但却列表的大小不与1所以我看到显示的结果列表匹配之间的空白行间印刷

System.out.println(productResults.size()); 
for(int i=0;i<productResults.size();i++){ 
     System.out.println(productResults.get(i).getText()); 
} 

此外,我试图找到诸如数量文本框的独立控制,以类似像我如何定位的产品的名称,但该列表计数不匹配等等,我不能指定数量添加按钮,添加需要的产品到购物车。

你能帮我解决这个问题吗?

回答

1

第一步是只得到可见itens(即显示),SOU您可以使用此XPath:

"//*[contains(@id,'product')][not(contains(@style,'display:none'))]/div[2]/span[2]/a" 

现在,你需要返回主ITEN格,允许你接取其他功能。你可以得到标签父母以这种方式:

"//*[contains(@id,'product')][not(contains(@style,'display:none'))]/div[2]/span[2]/a/../../.." 

,你在这最后的XPath收到该元素具有所有的HTML itens你想要的,如设置数量,选择下拉等,您可以使用每一个findElement接取()在列表的每个IWebElement中。例如:

List<WebElement> productResults = browser.findElements(By.xpath("//*[contains(@id,'product')][not(contains(@style,'display:none'))]/div[2]/span[2]/a/../../..")); 

for(WebElement element : productResults){ 

    IWebElement quantityInput = element.findElement(By.XPath("//input[contains(@id, '_qty')]")); 
    string quantityValue = quantityInput.getAttribute("value"); // if you want to know the current value. YOu can also parse it in an int 

    IWebElement addButton = element.findElement(By.XPath("//a[contains(@class, 'add-button')]")); 

    // etc to all elements inside element. 
    // Remember: Element is yout complete card of the item, that contains Value, name, image, buttons and all it. 
} 

对不起,有些Java语法错误。我不是Java开发人员/测试人员。我的一块蛋糕是C#。

+0

嗨Striter阿尔法,谢谢你的回答。我现在可以得到确切的结果数并能够使用xpath // * [contains(@ id,'product')] [not(contains(@ style,'display:none'))]/DIV [2] /跨度[2]/A。但我不知道如何识别附加的数量文本字段,特定产品搜索结果的添加按钮作为数量文本字段,添加按钮具有唯一的ID。请帮帮我。 –

+0

@SrinivasanRamu检查编辑的解释是否对你有帮助! –

+0

非常感谢。这帮助了我。 –

相关问题