我在以下链接中有一个搜索结果列表,想知道如何使用动态xpath识别各个控件
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());
}
此外,我尝试找到各个控件,如数量文本框,添加按钮,类似于我如何找到产品名称,但列表计数不匹配,所以我无法指定数量,添加所需的产品到车。
你能帮我解决这个问题吗?
答案 0 :(得分:1)
第一步是只获得可见的itens(显示),你可以使用这个xpath:
"//*[contains(@id,'product')][not(contains(@style,'display:none'))]/div[2]/span[2]/a"
现在,您需要返回主要的iten div,它允许您访问其他功能。您可以通过这种方式获取标签父母:
"//*[contains(@id,'product')][not(contains(@style,'display:none'))]/div[2]/span[2]/a/../../.."
您在最后一个XPath中收到的元素包含您想要的所有html itens,如设置数量,选择下拉列表等。您可以在列表的每个IWebElement中使用findElement()来访问每个元素。例如:
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#。