Да, люди все время делают вещи, которые они не понимают полностью, и не понимают, что код не всегда работает так, как они ожидают.
Как указал Джим, порядок окнадескрипторы (вкладки) в возвращаемом массиве из .getAllWindowHandles()
не гарантируются. Вы можете вызвать .getAllWindowHandles()
, сохранить этот список как before
, создать новую вкладку, снова вызвать .getAllWindowHandles()
и сохранить этот новый список как after
, а затем сравнить два и найти дескриптор в новом списке, который нене существует в старом списке ... это дескриптор вашей недавно созданной вкладки.
Я не делаю JS, но вы можете использовать функцию .filter()
для этого сравнения.
function array_diff(a, b) {
return a.filter(function(value) {
return (b.indexOf(value) === -1);
});
}
console.log(array_diff(["a", "b", "c"], ["a", "b"]));
Это возвращает ["c"]
.
Я могу представить, что вы делаете что-то вроде
before = driver.getAllWindowHandles();
// do something that creates a new window/tab
// might need to wait for the new window to be created
after = driver.getAllWindowHandles();
handle = array_diff(after, before);
driver.switchTo().window(handle);