I saw the other questions regarding similar/same issues but they did not help me solve the problem :(. I log into the production site . say ( http://www.site.com/log) . I want to click on a link after that but Selenium is not able to find the link. The relevant HTML part is :
<div style="display:none" id="managers">
<a class="projectManager" style="color:black"> Project Manager</a>
<a class="transportManager"> Transport Manager</a>
</div>
The java code is below:
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Select;
public class test {
private WebDriver driver;
private String baseUrl="";
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
//driver = new FirefoxDriver();
//driver.manage().timeouts().implicitlyWait(45, TimeUnit.SECONDS);
DesiredCapabilities chromeCapabilities = DesiredCapabilities.chrome();
String chromeBinary = System.getProperty(" ");
if (chromeBinary == null || chromeBinary.equals("")) {
String os = System.getProperty("os.name").toLowerCase().substring(0, 3);
chromeBinary = "lib/chromedriver-" + os + (os.equals("w开发者_JAVA技巧in") ? ".exe" : "");
System.setProperty("webdriver.chrome.driver", chromeBinary);
}
driver=new ChromeDriver(chromeCapabilities);
driver.manage().timeouts().implicitlyWait(70,TimeUnit.SECONDS);
}
@Test
public void testEmployee() throws Exception {
driver.get("http://www.site.com/log");
driver.findElement(By.name("j_username")).clear();
driver.findElement(By.name("j_username")).sendKeys("username");
driver.findElement(By.name("j_password")).clear();
driver.findElement(By.name("j_password")).sendKeys("password");
driver.findElement(By.cssSelector("input[name=\"login\"]")).click();
Thread.sleep(10000);
driver.findElement(By.linkText(" Project Manager")).click();
driver.findElement(By.linkText("Sign Out")).click();
System.out.println("Test done");
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
}
Question: What is the error ? It gives an "element not found" exception
Thanks.
Try using the following..
driver.findElement(By.partialLinkText(" Project Manager")).click();
driver.findElement(By.partialLinkText("Sign Out")).click();
Hope this works.
My Understanding: I think here you are looking for the link "Project Manager".
Step 1: Link Text Won't Support Always.So Go with CSS Selector
CSS Selector for Project Manager:css=.projectManager
Step 2:
Perform the Click
driver.findElement(By.cssSelector(".projectManager")).click();
AlterNative Methods to click
driver.findElement(By.className("projectManager")).click();
driver.findElement(By.partialLinkText("Project Manager")).click();
If you have a CSS class you should prefere this solution to finding an element by the link text as it is far more stable and can also be used on multi language UIs
Thanks!
What about removing the blank in the link text string? You have
driver.findElement(By.linkText(" Project Manager")).click();
try
driver.findElement(By.linkText("Project Manager")).click();
HTML doesn't count spaces.
精彩评论