2011-10-10 121 views
3

我看到關於類似/同樣的問題其他問題,但他們並沒有幫我解決了問題:(我登錄到生產現場。說(http://www.site.com/log)。我想點擊之後,但硒的鏈接無法找到鏈接相關的HTML部分是:硒2的webdriver無法找到鏈接

<div style="display:none" id="managers"> 
      <a class="projectManager" style="color:black"> Project Manager</a> 

      <a class="transportManager"> Transport Manager</a> 
     </div> 

的Java代碼如下:

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("win") ? ".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; 
     } 
    } 
} 

問:?什麼是錯誤它給出了一個「未找到元素」異常

謝謝。

+0

你檢查瀏覽器的版本,看看它是由硒支持? – 2011-10-10 09:37:16

+0

是的。它是 。它能夠點擊谷歌鏈接並做一些其他的事情。 – crazyaboutliv

+0

哪一行實際上給出了「找不到元素」異常? – 2011-10-10 09:46:11

回答

6

嘗試使用以下..

driver.findElement(By.partialLinkText(" Project Manager")).click(); 
driver.findElement(By.partialLinkText("Sign Out")).click(); 

希望這個作品。

+0

嘿,這就是我所做的。不過,我很奇怪,爲什麼做這項工作,並沒有什麼剩下:( – crazyaboutliv

+0

好......聽着,這是怎麼回事..當U指定By.linkText(「somelement」);這裏「somelement」應爲它是在代碼中指定的,我的意思是說,在你的代碼中有一個名爲Project Manager的鏈接,它可能包含一些&nbsp(空格)字符,所以selenium驅動程序匹配確切的搜索,因此它沒有找到該元素。因此,在這種情況下,你應該嘗試的元素,這是使用By.partialLinkText(「SomeElement」)完成部分匹配。 大聽到它的工作好.. –

+0

6年過去了,在VBA中,這確實有竅門!我從來沒有注意到「PartialLink」作爲選項,但它正是我所期待的。謝謝,@AmitHorakeri! – FreeMan

0

有關鏈接文本字符串刪除空白怎麼辦? 你有

driver.findElement(By.linkText(" Project Manager")).click(); 

嘗試

driver.findElement(By.linkText("Project Manager")).click(); 

HTML不計空格。

1

我的理解: 我想在這裏你正在尋找的鏈接「項目經理」。

第1步: 鏈接文本將不支持使用CSS選擇器

項目經理CSS選擇器Always.So轉到:CSS = .projectManager

第2步:

執行點擊

driver.findElement(By.cssSelector(".projectManager")).click(); 

替代方法來點擊

driver.findElement(By.className("projectManager")).click(); 
driver.findElement(By.partialLinkText("Project Manager")).click(); 

如果你有一個CSS類,你應該prefere該解決方案通過鏈接文本找到一個因素,因爲它是更爲穩定,也可以在多語言用戶界面

謝謝使用!

相關問題