Я пишу тест селена, используя javascript в Jmeter. Когда я нажимаю на ссылку на сайте, она по умолчанию открывается в новой вкладке. Автоматизированный браузер даже переключается на эту новую вкладку. Но, кажется, селен не переключается на новую вкладку. Когда я печатаю внутренний HTML-код для элемента body (полученного с помощью xpath //body
) после нажатия на ссылку, я получаю исходный код для первой вкладки, а не для второй.
Когда я пытаюсь дождаться какого-либо элемента на следующей странице (например, ожидая //div[@id="my-div-on-second-page-only"]
), я получаю тайм-аут, говорящий, что элемент никогда не был обнаружен (спустя много времени после того, как я вижу, что страница завершила загрузку).
Я столкнулся с этим вопросом, но это для python, и я также изо всех сил пытаюсь понять принятый ответ.
Обновлять
Мой код для переключения вкладок в настоящее время выглядит так:
// Switch tabs
var tabs = WDS.browser.getWindowHandles();
var tab = WDS.browser.getWindowHandle();
WDS.log.info("Tabs: " + tabs + " current: " + tab); // Output below
// Assume always there are only two tabs
for (t in tabs)
{
WDS.log.info("Checking tab " + t);
if (t != tab)
{
WDS.log.info("Switching to " + t);
WDS.browser.switchTo().window(t);
break;
}
}
Вывод для строки, отмеченной // Output below
:
Tabs: [CDwindow-A83928D86BA4F6F46C5D7F4B63B674A5, CDwindow-177CF406C98C28DF4AF5E7EC3228B896] current: CDwindow-A83928D86BA4F6F46C5D7F4B63B674A5
Я даже не вхожу в цикл for/in. Я пробовал переключаться с помощью tabs[index]
, tabs.get(0);
и tabs.iterator.next();
, но ни один из них не работал. Я весь день рыскал в Интернете в поисках информации о типе данных, возвращаемом WDS.browser.getWindowHandles();
, но никак не мог ее найти.
Обновление 2
В конце концов я переключился на интерпретатор Java. Ни одно из предложенных решений, даже в javascript, не сработало. Я подозреваю, что проблема связана с самим интерпретатором javascript. Я собираюсь оставить вопрос открытым на случай, если кто-то захочет предложить решение, которое протестировано и работает в расширении веб-драйвера Jmeter для будущих знаний.
Ниже мой рабочий код Java. Он использует пример Матиаса Домингеса, в котором предполагается, что последняя запись в tabs
является новой вкладкой. Хотя я считаю, что решение Майка Кука кажется лучшим с точки зрения общего решения, решение Матиаса было достаточно для моей проблемы.
// Switch tabs
ArrayList tabs = new ArrayList(); // Jmeter interpreter uses <String> by default
tabs.addAll(WDS.browser.getWindowHandles());
String tab = WDS.browser.getWindowHandle();
WDS.log.info("Tabs: " + tabs + " current: " + tab + " Size of tabs: " + tabs.size());
WDS.browser.switchTo().window(tabs.get(tabs.size() - 1));
WDS.log.info("Tabs switched successfully");