2016-06-21 50 views
1

網頁我正在自動化:https://app.ghostinspector.com/account/create硒的Java無法從網頁元素文本

場景:我點擊註冊頁面上,並輸入詳細信息,然後點擊註冊按鈕,現在如果用戶通過一個相同的電子郵件處理消息「電子郵件地址已被使用」。顯示在網站上,所以我想要做的是找到文本消息清除它並在運行時輸入另一個電子郵件地址。

現在的問題是錯誤消息文本不會被selenium的gettext方法獲取。

下面是代碼:

WebElement email_in_use = driver.findElement(
    By.xpath("/html/body/div[1]/div/div/div[2]/form/div/div[1]")); 
    String message = email_in_use.getText();  
    System.out.println(message); 

讓我知道什麼是這裏的問題。

+0

嘗試使用更好的XPath表達式,而不是工具自動生成XPath表達式。檢查https://www.w3schools.com/xml/xpath_intro.asp –

+0

@AmrLotfy感謝您的建議,但這個問題放了一年,如果你沒有錯過發佈日期:)是一個初學者在這時間。 –

回答

0

儘量usinfg這個以清除文本框

driver.switchTo().alert().getText(); 
+0

那不是問題。我無法獲得「電子郵件地址已被使用」的文字。從webelement email_in_use .... –

+0

可以分享該email_in_use標記的HTML代碼 – SaiPawan

+0

當然可以。

E-mail address is already in use.

0

您正在使用的getAttribute(「值」)得到的div元素的文本。嘗試使用email_in_use.getText()。

+0

yup Sudharshan最初嘗試過gettext()方法,但它並不奏效。 –

+0

它對我來說工作正常。嘗試添加Thread.sleep(2000)後單擊創建帳戶按鈕並從div中獲取文本。 –

+0

@SudharsanSelvarj'Thread.sleep'不是一個更好的解決方案來實現它,你需要用'ExpectedCondition'實現'WebDriverWait' ... :) –

0

這裏需要實現WebDriverWaitgetText()因爲error元素沒有任何文本已經存在那裏,它填充文本時出現像E-mail地址的任何錯誤已在使用。

所以,你需要等到error元素有一些文字像如下: -

WebDriverWait wait = new WebDriverWait(driver, 100); 

String message = wait.until(new ExpectedCondition<String>() { 
        public String apply(WebDriver d) { 
         WebElement el = d.findElement(By.xpath("/html/body/div[1]/div/div/div[2]/form/div/div[1]")); 
         if(el.getText().length() != 0) { 
          return el.getText(); 
         } 
        } 
       }); 

System.out.println(message); 

注意: - 當你的xpath是位置是依賴於元素位置,它可能會失敗,如果在行動中會有一些元素添加,我建議,你可以使用這個xpathBy.xpath("//div[@ng-show='errors']")

您也可以使用像如下: -

wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//div[@ng-show='errors']"), "E-mail address is already in use")); 
WebElement email_in_use = driver.findElement(By.xpath("//div[@ng-show='errors']")); 
String message = email_in_use.getText(); 

希望它會工作.... :)

1

你只需要一個短暫的觀望等待,直到包含錯誤信息的DIV出現。下面的代碼正在爲我工​​作。

WebDriver driver = new FirefoxDriver(); 
driver.get("https://app.ghostinspector.com/account/create"); 
driver.findElement(By.id("input-firstName")).sendKeys("Johnny"); 
driver.findElement(By.id("input-lastName")).sendKeys("Smith"); 
driver.findElement(By.id("input-email")).sendKeys("[email protected]"); 
driver.findElement(By.id("input-password")).sendKeys("abc123"); 
driver.findElement(By.id("input-terms")).click(); 
driver.findElement(By.id("btn-create")).click(); 
WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement e = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("div[ng-show='errors']"))); 
System.out.println(e.getText()); 
0

您試過element.getAttribute('value')

src