Невозможно пройти через фрейм с помощью веб-драйвера Java - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь получить элементы во втором кадре здесь

, но я получаю сообщение об ошибке, что элемент не существует или

Unable to locate element: {"method":"xpath","selector":"//frameset/frame[2]//a"}

Я пробовал каждый метод там, но он не работает для меня, это мой код

WebDriver driver = new ChromeDriver();
driver.get("https://dps.psx.com.pk/");  

//switch to the mainFrame
WebElement mainFrame = driver.findElement(By.xpath("//frameset/frame[2]//a"));
driver.switchTo().frame(mainFrame);
List<WebElement> childs = mainFrame.findElements(By.xpath(".//*"));

for(WebElement child : childs) {
    System.out.println(child);
}

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

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

В соответствии с HTML , которым вы поделились, чтобы перейти к нужному frame, вам необходимо:

  • Индуцировать WebDriverWait для желаемого фрейма вбыть доступным и переключиться на него.
  • Индуцировать WebDriverWait , чтобы требуемый элемент был активным , и вы можете использовать следующее решение:

    • Использование name:

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("mainFrame")));
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("element_name"))).click();
      
    • Использование xpath:

      new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frame[@name='mainFrame' and contains(@src,'index1')]")));
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))).click();
      
0 голосов
/ 22 октября 2018

Локатор frame равен //frameset/frame[2], //a - это углубление в frame.

. Вы также можете напрямую использовать атрибут name для переключения.switchTo().frame() может получить id, name или WebElement в качестве параметра

driver.switchTo().frame("mainFrame");

Если для загрузки кадра требуется время, вы можете использовать явное ожидание и ExpectedCondition frameToBeAvailableAndSwitchToIt

WebDriverWait wait = new WebDriverWait(WebDriverRefrence,20);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//frameset/frame[2]")));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...