Селен: XPATH недопустим при хранении в строке - PullRequest
0 голосов
/ 27 сентября 2018

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

В моем основном скрипте отлично работает следующее:

new Select(driver.findElement(By.id("secId:mainBody:vboxlist:s_m9_aa2::content"))).selectByVisibleText(contract.getCreditype());

Но, используя функцию, она не работает:

writeScreen("Description : ", "secId:mainBody:vboxlist:s_m9_aa2::content");

public void writeScreen(String description, String identifiant) {
            String xpath="//*[@id=\\\""+identifiant+"\\\"]";
            Select select = new Select(driver.findElement(By.xpath(xpath)));
            WebElement option = select.getFirstSelectedOption();
            String defaultItem = option.getText();
            System.out.println(description+defaultItem);

Я получил следующую ошибку:

org.openqa.selenium.InvalidSelectorException: неверный селектор: невозможно найти элемент с выражением xpath // [@ id = \ "secId: mainBody: vboxlist: s_m9_aa2 :: content\ "] из-за следующей ошибки: SyntaxError: Не удалось выполнить« оценку »для« документа »: строка« // [@ id = \ "secId: mainBody: vboxlist: s_m9_aa2 :: content \"] 'не является действительным выражением XPath.

Когда я проверяю XPATH, он точно такой же, как в моем первом рабочем примере.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Ваш xpath неверен, пожалуйста, измените String xpath="//*[@id=\\\""+identifiant+"\\\"]"; следующим образом:

String xpath="//*[@id='"+identifiant+"']";

0 голосов
/ 27 сентября 2018

если ваш xpath неверен, возможно, потому что элемент еще не загружен?

Так что иногда скрипт запускается быстрее, чем время отклика веб-страницы.

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

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

    writeScreen("Description : ", "secId:mainBody:vboxlist:s_m9_aa2::content");

public void writeScreen(String description, String identifiant) {
            String xpath="//*[@id=\\\""+identifiant+"\\\"]";
            Select select = new Select(driver.findElement(By.xpath(xpath)));
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            WebElement option = select.getFirstSelectedOption();
            String defaultItem = option.getText();
            System.out.println(description+defaultItem);

Вот как может выглядеть ваш код

Еще одна проблема, которую я только что заметил, вы, скорее всего, неправильно делаете xpath, при объявлении его в вашей переменной он должен выглядеть следующим образом

String xpath="//*[@id=\\\"'+identifiant+'\\\"]";

то, как вы это делаете, делает + identifiant + функцией, а не строкой, ссылающейся на xpath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...