2017-08-01 8 views
0

アプリケーションからツールチップのテキストを取得するために、以下のコードを書いています。しかし、それは常に空のように値を渡しています。(「」)http://demoqa.com/ アプリケーションがToolsQAであると仮定「」と私はhttp://demoqa.com/tooltip/のツールチップテキスト撮りたい「あなたの年齢を」JavaのSelenium WebDriverからツールヒントのテキストを取得します

私が使用している以下のコードを参照してくださいしてください。

public String getToolTipText(String xpath) throws InterruptedException{ 

     xpath = "//div[@class='inside_contain']//input"; 
     WebElement mainElement = driver.findElement(By.xpath(xpath)); 
     Actions act = new Actions(driver); 
     //act.moveToElement(mainElement).build().perform(); 
     act.clickAndHold(mainElement).build().perform(); 
     Thread.sleep(5000); 
     String tooltiptextreal = mainElement.getAttribute("title"); 

     return tooltiptextreal; 
    } 

アサーション:

String TooltipText = "We ask for your age only for statistical purpose."; 
    Assert.assertEquals(pToolsQAWidgetTooltipPageDom.getToolTipText(), TooltipText); 

出力:あなたがその入力の上にマウスを取得すると

java.lang.AssertionError: expected [We ask for your age only for statistical purpose.] but found [] 

答えて

0

は、あなたの質問への答えです:

次のコードブロックを使用することができますWe ask for your age only for statistical purpose.ツールヒントテキストを取得するには。次のコードブロックは、ツールヒントをWe ask for your age only for statistical purpose.として抽出し、コンソールに出力します。

package demo; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.testng.annotations.Test; 

public class Q45433269_Tooltip 
{ 
    @Test 
    public void getToolTipText() throws InterruptedException 
    { 
     System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); 
     WebDriver driver = new FirefoxDriver(); 
     driver.navigate().to("http://demoqa.com/tooltip/"); 
     driver.findElement(By.id("age")).click(); 
     Actions act = new Actions(driver); 
     WebElement age_purpose = driver.findElement(By.xpath("//div[contains(@id, 'ui-id-')]/div[@class='ui-tooltip-content']")); 
     act.moveToElement(age_purpose).perform(); 
     String tooltiptextreal = age_purpose.getText(); 
     System.out.println("Tooltip text is : "+tooltiptextreal); 
    } 
} 

コンソールに出力のようになります。これは、あなたの質問に答えるなら、私を知ってみましょう

Tooltip text is : We ask for your age only for statistical purposes. 
PASSED: getToolTipText 

=============================================== 
    Default test 
    Tests run: 1, Failures: 0, Skips: 0 
=============================================== 

+0

ありがとうございました。これはうまくいきました。明確にするもう一つのこと。私が見ることができるように、xpathは "// div [contains(@ id、 'ui-id - ')]/div [@ class = 'ui-tooltip-content']として定義されています。可能性のある一致を示していない要素を検査する際にそのxpathを検索したとしてもそれを導出します。 –

+0

@NickWあなたを助けることができてうれしいです:)あなたがもっと見ると、 'id'は動的であることがわかります。したがって、私は 'contains'を使用しましたが、' ui-tooltip-content'クラスへの参照を取得しました。 – DebanjanB

0

"タイトル" 属性が削除される(ブラウザのdevのツールで確認してください)あなたのように適切な値を得ることができません。

enter image description here

あなたが必要な場合は、 "タイトル" 属性の値は、あなたのコードから

Actions act = new Actions(driver); 
//act.moveToElement(mainElement).build().perform(); 
act.clickAndHold(mainElement).build().perform(); 

を削除してみてください。ここで

+0

は、私はあなたがコメントとして一部を削除したが、まだそれは同じ結果与える:By.xpath { \t \t \t \t WebElement mainElement = driver.findElement( がString getToolTipText(文字列のXPathは)例外:InterruptedExceptionをスロー公共: 新しいコードを(xpath)); \t \t //アクションact = newアクション(ドライバ); \t \t //act.moveToElement(mainElement).build()。perform(); \t \t //act.clickAndHold(mainElement).build()。perform(); \t \t Thread.sleep(5000); \t \t文字列tooltiptextreal = mainElement.getAttribute( "title"); \t \t \t \t return tooltiptextreal; \t} –

関連する問題