如何使用Selenium Webdriver识别搜索结果中的各个控件?

时间:2016-05-09 17:48:09

标签: selenium xpath

我在以下链接中有一个搜索结果列表,想知道如何使用动态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());
}

此外,我尝试找到各个控件,如数量文本框,添加按钮,类似于我如何找到产品名称,但列表计数不匹配,所以我无法指定数量,添加所需的产品到车。

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

1 个答案:

答案 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#。