簡體   English   中英

使用Java + Selenium WebDriver獲取一些文本

[英]Get some text with java + selenium WebDriver

我只想收到“邀請發送到xxxxx”文本,我不想得到里面的內容

<button class="action" data-ember-action="" data-ember-action-3995="3995">
          Visualizar perfil
 </button>

我這樣得到文本:

String pessoapopu = driver.findElement(By.className("artdeco-toast-message")).getText();                
System.out.println(pessoapopu); 

頁面結構:

<div class="artdeco-toast-inner" data-ember-action="" data-ember-action-3994="3994">
    <li-icon aria-hidden="true" type="success-pebble-icon" class="artdeco-toast-icon"><svg viewBox="0 0 24 24" width="24px" height="24px" x="0" y="0" preserveAspectRatio="xMinYMin meet" class="artdeco-icon"><g class="large-icon" style="fill: currentColor">
        <g id="success-pebble-icon">
          <g>
            <circle class="circle" r="9.1" stroke="currentColor" stroke-width="1.8" cx="12" cy="12" fill="none" transform="rotate(-90 12 12)"></circle>
            <path d="M15.667,8L17,9.042l-5.316,7.36c-0.297,0.395-0.739,0.594-1.184,0.599c-0.455,0.005-0.911-0.195-1.215-0.599l-2.441-3.456l1.416-1.028l2.227,3.167L15.667,8z" fill="currentColor"></path>
            <rect style="fill:none;" width="24" height="24"></rect>
          </g>
        </g>
        <g id="Layer_1">
        </g>
      </g></svg></li-icon>
    <p class="artdeco-toast-message">
              Invitation sent to xxxxx
        <button class="action" data-ember-action="" data-ember-action-3995="3995">
          Visualizar perfil
        </button>

    </p>
  </div>

圖片

您可以使用//p[@class='artdeco-toast-message']/text() xpath來定位Invitation sent to xxxxx文本的Invitation sent to xxxxx但是硒不支持xpath中的text()方法來定位文本節點。

如果您嘗試使用xpath下方的元素來定位元素,以通過使用xpath的not()函數來排除按鈕文本:

//p[@class='artdeco-toast-message']/node()[not(self::button)]

再次使用文本節點定位元素,因此Selenium不允許這樣做

這里有一個解決方案可以執行相同的xpath,即JavascriptExecutor

使用JavaScript的validate evaluate()方法並使用JavascriptExecutor評估您的xpath

JavascriptExecutor js = (JavascriptExecutor)driver;
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/text()\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;");
System.out.println(message.toString().trim());

要么

JavascriptExecutor js = (JavascriptExecutor)driver;
Object message = js.executeScript("var value = document.evaluate(\"//p[@class='artdeco-toast-message']/node()[not(self::button)]\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;");
System.out.println(message.toString().trim());

它會給您預期的結果。 無需獲取所有數據,然后使用String函數進行格式化。

您可以從這里詳細探索evaluate()

您可以嘗試以下代碼。

WebElement text=driver.findElement(By.className("artdeco-toast-message"));
String wholeText = text.getText();
String unWantedText=text.findElement(By.className("action")).getText();
String RequiredText=wholeText.replace(unWantedText,"");
System.out.println(RequiredText);

實際上,Selenium的getText()方法也可以檢索子元素中的所有文本,因此據我所知, Murthi推薦的方法是最適用的。 試試這個方法:

String newLine = System.getProperty("line.separator");
String pessoapopu = driver.findElement(By.className("artdeco-toast-message"))
                           .getText().replaceAll(newLine, "");

嘗試/詢問更方便的HTML代碼。

給定HTML,您應該能夠.getText() ,在換行符上拆分該文本,然后進行第一次拆分以獲取所需的文本。

driver.findElement(By.cssSelector("p.artdeco-toast-message")).getText().split("\r\n")[0];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM