2014-01-08 68 views
1
package testproject; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.*; 
    public class mytestclass { 
    public static void main(String[] args) { 
     WebDriver Driver = new FirefoxDriver(); 
     Driver.get("https://www.gmail.com/"); 
     WebElement wb= Driver.findElement(By.name("Email")); 
     wb.sendKeys("sweta"); 
     WebElement wb1= Driver.findElement(By.name("Passwd")); 
     wb1.sendKeys("123456"); 
     WebElement wb2= Driver.findElement(By.id("signIn")); 
     wb2.click(); 
     WebElement wb3= Driver.findElement(By.xpath(".//*[@id='gb']/div[1]/div[1]/div[2]/div[5]/div[1]/a")); 
     wb3.click(); 
     WebElement wb4= Driver.findElement(By.id("gb_71")); 
     wb4.click(); 
    } 
} 

當我執行此代碼一切細下去,直到我想要被點擊按鈕的標誌點。線程「main」中的異常org.openqa.selenium.NoSuchElementException:無法找到元素:{「method」:「xpath」,「selector」:「.//*[@ id =' gb']/div [1]/div [1]/div [2]/div [5]/div [1]/a「}但是當我試圖用fierbug找到它的工作正常。 在上面提到的代碼中,我更改了電子郵件ID和密碼以確保電子郵件的安全。爲什麼我的測試拋出異常 - 無法在webdriver中定位元素?

我面臨的問題與我的stakwave已經發布,所以如果ü可以,那麼請看看這個鏈路webdriver is not able to click on a hyperlink in firefox

+0

我要提出兩個建議。 1)一條忠告,這是大多數人通過物理登錄到Gmail的過程中,讓他們的測試檢查電子郵件已正確發送,但這是不必要的,因爲有許多*庫可以登錄到Gmail並且無需物理瀏覽器即可返回收件箱和郵件。 2)如果你*絕對必須*身體上去Gmail,我認爲你不這樣做,然後使用「基本模式」......它的HTML更簡單(雖然仍然複雜),但會給你一個更好的機會。 – Arran

+2

@arran對不起,我沒有得到這個 - 什麼是「基本模式」? –

+0

https://support.google.com/mail/answer/15049?hl=zh_CN ...但正如我所說的,我高度,高度,高度懷疑您甚至需要打擾登錄到Gmail,但您沒有解釋你的用例或上下文非常好。我也可以建議不要創建很多StackOverflow問題。你最終會自己混淆我們*和*。一次有一個問題。 – Arran

回答

1

你確定你的頁面載入中,您登錄後多了一個程序?

您是否爲您的webdriver設置了超時? (等待元素需要多長時間)。可能它在完成加載之前讀取您的html。

Webdriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 

要儘快查出是否是這個問題做Thread.sleep(8000)你做wb2.click();

+0

不,這不是問題,因爲我已經嘗試了3000毫秒的Thread.sleep。但它不會奏效。 –

+0

確定它足夠長?根據我的經驗,較慢的應用程序可能需要一些時間。 如果網站在線,也許你可以給一個鏈接 – Charlie

+1

我無法登錄。不知道原因 –

1

後您的XPath表達式的開頭刪除的點。這樣你有一個xpath表達式可以匹配所有的東西。如果當前節點是根節點,根據開始處的點可能會限制自己。我無法知道它。只是點這個事實只能給你帶來麻煩。不幸的是,你不能總是相信像螢火蟲這樣的工具會給你帶來什麼(在99%的案例中它仍然是如此)。

當然,請確保您的目標elemetns已經在屏幕上由以前的答案的建議。

0

請從XPath的點(。)和星號(*)和地方明星給予適當的標籤名。

例如如果@ ID = GB是div元素,地點的div代替星的標識。 希望它能起作用。

1

我遇到類似的問題, 問題設置超時後解決。

Webdriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 

不知道什麼是超時的作用,儘管如此。

+0

這個設置幫了我。 – Kusum

0
//launch browser 
FirefoxDriver driver = new FirefoxDriver(options); 
driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 
//gmail login : 
driver.get("http://www.gmail.com"); 
driver.findElement(By.id("identifierId")).sendKeys("****",Keys.ENTER); 
Thread.sleep(5000); 
driver.findElement(By.id("password")).sendKeys("***",Keys.ENTER); 
//logout: 
driver.findElement(By.xpath("//div[@id='gb']/div[1]/div[1]/div[2]/div[4]/div[1]/a/span")).click(); 
Thread.sleep(5000); 
driver.findElement(By.linkText("Sign out")).click(); 
+1

嗨,歡迎來到Stack Overflow。請嘗試詳細說明你的答案。謝謝。 –

相關問題