如何从工具提示中查找和获取文本?

时间:2019-01-14 00:44:13

标签: c# selenium selenium-webdriver

我试图在div中找到一个工具提示,然后提取工具提示文本,当我将鼠标悬停在工具提示上时,该文本便可见。 从UI复制以下代码快照-

<div class="w-table w-table-hover ng-star-inserted">
    <table class="w-table  w-table-hover">
        <tbody>
            <tr class="w-table-border">
                <td class="w-table-row pl-3 w-table-width-60">
                    John Spiderman (123456)
                </td>
                <td class="w-table-row pl-2 w-table-width-25">
                    Open
                </td>
                <td class="w-table-row text-right px-2 w-table-width-15">
                    <!---->
                    <div class="w-table-row-text ng-star-inserted">
                        Unavailable
                        <i class="fa fa-question-circle w-icon-question-circle" 
                           container="body"
                           placement="right"
                           id="tooltip-report-account-123456">
                        </i>
                    </div>
                    <!---->
                </td>
           </tr>
       </tbody>
   </table>

我尝试执行以下操作以找到该元素,然后从其中抓取文本,但是由于文本仅在鼠标悬停时显示,因此它不起作用

var tooltipElement = driver.FindElement(By.Id("tooltip-report-account-" + accountNumber));
Assert.AreEqual(tooltipElement.Text.ToLower().Trim(), 'This account is unavailable');

无法找到元素

3 个答案:

答案 0 :(得分:0)

我猜字符串This account is是javascript函数中的前缀,为什么不只与Unavailable进行比较,后者是该元素ID的父级文本。

var tooltipElement = driver.FindElement(By.XPath("//i[@id='tooltip-report-account-" + accountNumber + "']/parent::div"));
Assert.AreEqual(tooltipElement.Text.ToLower().Trim(), 'unavailable');

答案 1 :(得分:0)

您需要先使用动作类执行鼠标悬停,然后再尝试找到显示工具提示的元素

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(10));
var element = wait.Until(ExpectedConditions.ElementIsVisible(By.XPath(<element xpath>)));
Actions action = new Actions(Driver);
action.MoveToElement(element).Perform();   
//Waiting for the menu to be displayed    
System.Threading.Thread.Sleep(4000);

答案 2 :(得分:0)

如果找不到元素;那么也许使用的定位器有一些问题。 在xpath下面尝试一次:

var tooltipElement = driver.FindElement(By.Xpath("//*[contains(@id,'tooltip-report-account')]"));