Могу ли я получить этот элемент ввода с помощью Selenium? - PullRequest
0 голосов
/ 25 февраля 2019

Я новичок в Selenium.Я искал все возможные способы решения этой проблемы (на данный момент я думаю, что это просто неразрешимо) У меня есть веб-страница (не могу поделиться) с этим вводом:

/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/div/iframe/#document/html/body/div[2]/div/iframe/#document/html/frameset/frame/#document/html/frameset/frameset/frameset/frame/#document/html/body/div/form/table/tbody/tr[2]/td[2]/input

(Как выможно увидеть, что в структуре есть сочетание фреймов, фреймов и наборов фреймов (некоторые из них имеют идентификатор, а другие - нет)

Проблема в том, что Selenium не найдет элемент ни одним из протестированных мной методов

.Сначала я попробовал с простым driver.findElement (By. all of them)

После того, как они не работали, я начал искать в Интернете, и я не мог найти, почему я не мог справиться с этим.

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

Это класс, в котором я пытался сделать это.работа , Если вы хотите проверить мою неудачную работу, я сосредоточил свои последние усилия на попытке № 8 .

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

Неужели нельзя получить этот элемент?Это один из тех случаев, когда Selenium не может автоматизировать?Или это из-за того, что я что-то упускаю.

объект видим, и даже нет полосы прокрутки, вся страница отлично помещается на экране, Xpath был одним из первых вариантов, которые я тестировал,не работал

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

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

После долгих попыток я понял, что селен переключался на другой кадр при последнем переключении.Вероятно, это ошибка, но я изменил способ, которым я получал последний переключатель, вместо

    var wait = (new WebDriverWait(driver, secsToWait));
    wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameNameOrId));

To

    driver.switchTo().frame(driver.findElement(By.xpath("//frame[@"+attribute+"='"+frameNameOrId+"']")));

Так что он наконец заработал и получил ввод нормально.

0 голосов
/ 25 февраля 2019

Не знаю, в этом ли проблема, но видим ли элемент, который вы пытаетесь использовать, или вам нужно прокрутить его, чтобы просмотреть?Если он не виден, попробуйте с помощью этого немного прокрутить:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,1000)");

Другое возможное решение - попытаться использовать абсолютный xpath вместо относительного.Существует несколько инструментов для поиска абсолютного xpath элемента на html-странице.Тогда вы можете использовать

driver.findElement(By.xpath(absoluteXpath));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...