Selenium Duplicate Elements marked with ==$0

北城余情 提交于 2019-12-02 05:33:32

问题


How to handle duplicate elements in selenium, where duplicate elements comes marked with ==$0 ?

Go to www.google.com and search for google search button, I have tried iterator and creating list, but, is this correct way of handling ==$0

driver.findElements(By.xpath("//input[@aria-label='Google Search']"));

I want to select second element.


回答1:


$0 - $4

The $0, $1, $2, $3 and $4 are the historical reference to the last five DOM elements inspected within the Elements panel of google-chrome-devtools or the last five JavaScript heap objects selected in the Profiles panel. $0 returns the most recently selected element or JavaScript object, $1 returns the second most recently selected one, and so on.


In your usecase, you have inspected the Google Search button through the Elements panel. So in the Console drawer, $0 has been evaluated and displays the same element as:


A bit more information about your usecase would have helped us to answer your question in a better way. However every element within the HTML DOM can be identified uniquely using either css-selectors or xpath.

If your usecase is to Google Search any particular term/phrase, you can use the following solution:

WebElement searchField = driver.findElement(By.name("q"));
searchField.sendKeys("user3245610");
searchField.sendKeys("Keys.RETURN");

You can find a detailed relevant discussion in How to click a random link from google search results through Selenium and Python




回答2:


The visible button that you would like to click is descendant of the div with "FPdoLc VlcLAe" class so you can select it with

driver.findElements(By.xpath("//div[@class='FPdoLc VlcLAe']//input[@name='btnK']"));

The invisible one is descendant of a div that has class = "VlcLAe" but no "FPdoLc" so that's the difference.




回答3:


You are getting two values while using //input[@aria-label='Google Search']

One of the possible solution is to use: (//input[@aria-label='Google Search'])[ 2 ] (the value in the solid brackets i.e. 2 should be without spaces)

Eg - driver.findElement(By.xpath("(//input[@aria-label='Google Search'])[ 2 ]"); //(the value in the solid brackets i.e. 2 should be without spaces)



来源:https://stackoverflow.com/questions/56389906/selenium-duplicate-elements-marked-with-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!