2016-05-09 88 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

非常感謝。這幫助了我。 –

相關問題