I want to click on Administration panel. The <span>
contains a class attribute and inner text.
I get an error saying "unable to locate element". What am I doing wrong?
HTML:
<div class="item-inner">
<span class="title"> Administration </span>
<i class="icon-arrow"></i>
</div>
C# code
var admi = driver.FindElement(By.XPath("//span[contains(@class,'title')] [contains(text(),'Administration')]"));
admi.Click();
-
var admi = driver.FindElement(By.XPath("//div[contains(@class,'title')] [contains(text(),'Administration')]")); Try thissameer joshi– sameer joshi2015年11月18日 12:22:04 +00:00Commented Nov 18, 2015 at 12:22
-
have you soved this problem?i meet the same problem!cary wu– cary wu2023年02月20日 10:10:44 +00:00Commented Feb 20, 2023 at 10:10
5 Answers 5
Try to avoid the use of contains as your method of finding an element. This will mainly cause you issues later down the line when other elements unintentionally match
I would suggest you use something more like;
driver.FindElement(By.XPath("//div[@class='item-inner']/span[@class='title']"));
This example still isn't ideal, and ideally you should ask your developers to add in a unique ID for you to utilize.
Use following Xpath
driver.findElement(By.xpath("//span[@class='title']"));
Also make sure variable in which you are saving the element is of WebElement type.
var admi = driver.FindElement(By.XPath("//span[contains(@class,'title') and contains(text(),'Administration')]"));
You were almost there.
If you are using Pandas you can search by:
url = "YOUR_URL_HERE"
# create a new Firefox session
driver = webdriver.Firefox()
driver.implicitly_wait(1)
driver.get(url)
result = driver.find_elements_by_class_name('screen-reader-text')
pprint(result)
If the span
element is the only element on the page with the ClassName "title", you could just get the element by ClassName:
IWebElement admin = driver.FindElement(By.ClassName("title"));
If the span
element is not the only element with the ClassName "title", but is the only element with that ClassName under its parent, you can get the parent element then the span
element:
IWebElment admin = driver.FindElement(By.ClassName("item-inner")).FindElement(By.ClassName("title"));
Otherwise, I would follow the advise of others using the XPath. Usually I try to use other methods of finding elements because XPath can be slow or unreliable.