Selenium нажмите функциональную клавишу - PullRequest
0 голосов
/ 14 января 2020

Я все еще новичок в тестовом мире Selenium, и в настоящее время я использую Selenium ChromeDriver для тестирования.

Вот что я пытаюсь выполнить sh, но безуспешно:

1 - У меня есть ~ 50 открытых вкладок в Chrome, и я хочу нажать F9 на всех них одновременно

2 - После нажатия F9 для всех вкладок, если на странице появляется определенный текст (Нет результатов ), затем закройте вкладку.

Я надеюсь, что кто-то может помочь с любой из этих двух функций.

Заранее спасибо.

1 Ответ

1 голос
/ 14 января 2020

Нет способа (о котором я знаю), чтобы отправить нажатие клавиши сразу нескольким дескрипторам окна (каждая вкладка называется дескриптором окна в Selenium), но вы можете l oop через windows и попробовать чтобы использовать некоторый класс Actions для отправки нажатия клавиши F9 на каждую страницу, затем проверьте нужный текст.

Вам потребуется использовать Driver.WindowHandles, чтобы получить список текущих открытых вкладок, и Driver.SwitchTo().Window() изменить фокус между вкладками. Actions класс может симулировать отправку клавиши F9 в текущее окно. Driver.Close() закроет существующую вкладку.

Наконец, WebDriverWait будет использоваться для ожидания заполнения текста «Нет результатов», прежде чем код определит, следует ли закрыть текущую вкладку. WebDriverWait выдаст TimeoutException, если нужный элемент не появится на странице в течение указанного параметра времени, поэтому мы обертываем WebDriverWait в блок try / catch для обработки сценария ios, где 'Нет Результаты как существуют, так и не существуют.

Следующий пример кода в C# должен помочь вам начать:

using OpenQA.Selenium.Interactions;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;


// given you have 50 tabs open already

// get window handles -- this is a List<string> with length 50, one for each tab
var handles = Driver.WindowHandles;

// iterate window handles, switch to the window, and send F9 key
foreach (var window in handles)
{
    // switch to the window
    Driver.SwitchTo().Window(window);

    // send F9 key press to the current tab
    new Actions(Driver).SendKeys(Keys.F9).Perform();

    // wait for 'No Results' text
    try 
    {
        new WebDriverWait(Driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[contains(text(), 'No Results')]")));

        // if TimeoutException is not thrown, then No Results text exists. so close the tab
        Driver.Close();
    }
    catch (TimeoutException)
    {
        // case: 'No Results' text does not exist. do not close the tab.
    }
}

Это очень общая схема, и почти наверняка потребуется некоторые изменения на вашем конце, чтобы заставить его работать полностью. Например, XPath, используемый в new WebDriverWait(Driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[contains(text(), 'No Results')]")));, может потребоваться настроить, чтобы убедиться, что находится правильный элемент, отображающий текст «Нет результатов». Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...