Trying to find span element by class and text with selenium c#

  • 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 this

  • 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.

  • 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)
    
  • var admi = driver.FindElement(By.XPath("//span[contains(@class,'title') and contains(text(),'Administration')]"));

    You were almost there.

  • 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.

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM