Как найти и получить текст из всплывающей подсказки? - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь найти всплывающую подсказку внутри элемента div, а затем извлечь текст всплывающей подсказки, который виден, когда я наводю указатель мыши на подсказку. Копирование ниже снимка кода из пользовательского интерфейса -

<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 голосов
/ 14 января 2019

Сначала необходимо выполнить указатель мыши с помощью класса действий, а затем попытаться найти элемент, отображающий подсказку

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);
0 голосов
/ 14 января 2019

Если вы не можете найти элемент; тогда, возможно, используемый локатор имеет некоторые проблемы. Попробуйте использовать ниже xpath:

var tooltipElement = driver.FindElement(By.Xpath("//*[contains(@id,'tooltip-report-account')]"));
0 голосов
/ 14 января 2019

Я предполагаю, что строка This account is является префиксом в функции javascript, почему бы не сравнить ее с Unavailable, который является текстом от родителя идентификатора этого элемента.

var tooltipElement = driver.FindElement(By.XPath("//i[@id='tooltip-report-account-" + accountNumber + "']/parent::div"));
Assert.AreEqual(tooltipElement.Text.ToLower().Trim(), 'unavailable');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...