Нет способа (о котором я знаю), чтобы отправить нажатие клавиши сразу нескольким дескрипторам окна (каждая вкладка называется дескриптором окна в 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')]")));
, может потребоваться настроить, чтобы убедиться, что находится правильный элемент, отображающий текст «Нет результатов». Надеюсь, это поможет вам.