Can someone please help!
How can I highlight all web elements in following class during test execution in WebDriver?
With Selenium RC, it was quite straight forward but with WebDriver I am struggling.
I would be grateful if someone can please provide me with some code that I can try, also where would that code fit into the class below — sorry my Java skills aren’t all that great.
package hisScripts;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.*;
import org.testng.Assert;
import static org.testng.Assert.fail;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
public class R_LHAS_Only_Account_Verification extends HIS_Login_Logout{
public WebDriver driver;
public String baseUrl;
public int exeMonth;
private StringBuffer verificationErrors = new StringBuffer();
@BeforeClass
@Parameters ({"browser1", "url", "executionMonth"})
public void setUp(String browser1, String url, int executionMonth) throws Exception {
exeMonth = executionMonth;
baseUrl = url;
if (browser1.equals("FF")) {
driver = new FirefoxDriver();
} else if (browser1.equals("IE")){
driver = new InternetExplorerDriver();
}
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void R_LHAS_Reports() throws Exception {
R_LHAS_Only_Login(baseUrl, driver);
Assert.assertEquals("Kingston upon Thames (RB)", driver.findElement(By.xpath("//html/body/div[9]/div/div[3]/div/div/div")).getText());
Assert.assertEquals("Average price", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr/td")).getText());
Assert.assertEquals("% price change", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[2]/td")).getText());
Assert.assertEquals("Lower quartile price", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[3]/td")).getText());
Assert.assertEquals("Time to sell (weeks)", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[4]/td")).getText());
Assert.assertEquals("% asking price achieved", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[5]/td")).getText());
Assert.assertEquals("House price to earnings ratio", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[6]/td")).getText());
Assert.assertEquals("Cost of buying outright - LQ 2 bed £pw", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[7]/td")).getText());
Assert.assertEquals("Private rent 2 bed £pw", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[8]/td")).getText());
Assert.assertEquals("80% private rent 2 bed £pw", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[9]/td")).getText());
Assert.assertEquals("Social rent 2 bed £pw", driver.findElement(By.xpath("//table[@id='tableId']/tbody/tr[10]/td")).getText());
R_LHAS_Only_Logout(baseUrl,driver);
}
@AfterClass(alwaysRun=true)
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (! "".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
There is no way to do this in
WebDriver(as of v2.21.0). You can try replacing the usualfindElement(By)method with an adjusted one that uses JavaScript to highlight the found element:Now that you got the idea, there’s an improved version that restores the original
borderof the last element when a new one is found and highlighted:And the scripts! I load them from a file using
FileUtils.readFileToString().SCRIPT_GET_ELEMENT_BORDER (IE friendly version taken from this site), it would be way shorter if it used highlighting via changing the background color, say, only the bottom border. But this is the nicest one :).
SCRIPT_UNHIGHLIGHT_ELEMENT
Any questions, notes, requests and improvements are welcome!