Selenium select and extract text all possible ways
You can check also: Selenium locator contains text and
firefox 52 with gecko driver 52
In most cases text extraction with selenium can be done simply by:
e.getText()
But in some cases this will return nothing - nested tags, wrong tags etc.
If you want to extract text in those cases you can try by this examples- java code:
Selenium extract text 4 ways
I known 4 ways to get text from selenium element. Below I'm lising all of them:
- el.getText() - usually I'm using this one and it's working for most cases
- el.text - is quite similar to previous and it's working the same way
- el.getAttribute("textContent") - this one extract the text event when the previous two are not working
- el.getAttribute("innerHTML") - this extracts the inner html which sometimes can contain html which is the only difference to the previous one.
WebElement el = driver.findElements(By.cssSelector("div.myclass"));
String title1 = el.getText()
String title2 = el.text
String title3 = el.getAttribute("textContent")
String title4 = el.getAttribute("innerHTML");
Selenium locate single tag and class by css
Extracting single element div with class - myclass
WebElement el = driver.findElements(By.cssSelector("div.myclass"));
String text = el.getAttribute("textContent")
Selenium locate all tags by css
Extracting all elements of tag div with class - myclass
List<WebElement> el = driver.findElements(By.cssSelector("div.myclass"));
for (WebElement e : el4) {
def title = e.getText()
}
Selenium locate nested elements by xpath
Searching for nested tags span with class - yourclass in div with class - myclass
WebElement el = driver.findElement(By.xpath("//div[@class='myclass']//span[@class='yourclass']"));
String text = el.getText()
Selenium locate nested elements by cssSelector
Searching for nested tags span with class - yourclass in div with class - myclass by css locator. it's easier to read than previous one but it's limited to classes only
WebElement el = driver.findElement(By.cssSelector(".myclass .yourclass"));
String text = el.getAttribute("innerHTML");
Selenium locate nested elements by nested findElement
You can find nested tags by chaining findElement methods as bellow. Personally I find this method better because of it's readability and way to find if there is a problem:
WebElement el = driver.findElement(By.cssSelector("div.myclass"));
WebElement ee = el.findElement(By.cssSelector("span.yourclass"))
String text = ee.getAttribute("textContent")