Как различить формат ответов (флажок или Textarea et c.) при работе с циклом for - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть сценарий, в котором есть 15 вопросов, и мне действительно нужно выбрать ответ, выбрав radiobutton или checkbox или кнопку Yes / No, или мне нужно ввести какой-нибудь текст в textarea.

Мой следующий код успешно выбирая ответ случайным образом, будь то радио / флажок или кнопка Да / Нет, и отображает выбранную опцию в качестве ответа вместе с вопросом на консоли. Но как мне проверить, есть ли у него текстовое поле и нужно ли что-то вводить с помощью sendKeys? И как выбрать несколько флажков? И как отобразить ответ «Да» или «Нет» на консоли?

public void AssessmentTest() throws Exception
    {
    List<WebElement>totalQSN = driver.findElements(By.xpath("//div[@id='assessmentQuestionAnswersContainer']/div"));

    List<WebElement> mainQuestions = driver.findElements(By.xpath("//div[@id='assessmentQuestionAnswersContainer']/div/div[2]/div")); 

      System.out.println("The Questions are::");
            for(int i=0; i<totalQSN.size()-5; i++)
            {   
                System.out.println("QUESTION:- " + mainQuestions.get(i).getText() + "["+ i +"]" );

                Random rnd = new Random();
                List<WebElement> subOptions = totalQSN.get(i).findElements(By.tagName("input"));     
                WebElement sValue = subOptions.get(rnd.nextInt(subOptions.size()));
                sValue.click();
    List<WebElement> subQsnList = driver.findElements(By.xpath("//div[@id='assessmentQuestionAnswersContainer']/div/div[3]/div/span/span"));
                System.out.println(subOptions.size());
                for(int j=0; j<subOptions.size(); j++)
                {   
                    if(subOptions.get(j).isSelected())
                 {
                     String selectedAnswer= subQsnList.get(j).getText();
                     System.out.println("ANSWER: - " + selectedAnswer);
                     System.out.println("\n");
                    }
                }
            } } 

HTML Код такой же, как и для каждого типа вопроса.

<div id="individualQuestionAnswerContainer147" class="individual-question-answer-container" style="display: block;" xpath="1">
    <div class="individual-questions-count-container"></div>
    <div id="questionContainer147" style="clear: both; float: left;"></div> //Contains Question      
    <div id="questionAnswerContainer147" class="answers-container"></div> //Contains Answers        
</div>

Если у вопроса есть флажки, код будет

<div id="individualQuestionAnswerContainer148" class="individual-question-answer-container" style="" xpath="2">  Contains 4 checkbox(divs)
    <div class="individual-questions-count-container"></div>
    <div id="questionContainer148" style="clear: both; float: left;"></div>
    <div id="questionAnswerContainer148" class="answers-container" style="">
        <div class="answer-text">
            <span class="answer-text-inner btn-assessment-answer">
                <input type="checkbox" name="Checkbox148" id="Checkbox449" class="radio-assessment-answer">
                <span style="display: table;">
                    Good
                </span>
            </span>
        </div>
        <div class="answer-text">
            <span class="answer-text-inner btn-assessment-answer">
                <input type="checkbox" name="Checkbox148" id="Checkbox450" class="radio-assessment-answer">
                <span style="display: table;">
                    Mold
                </span>
            </span>
        </div>
        <div class="answer-text"></div>
        <div class="answer-text"></div>
    </div>
</div>

Если у вопроса есть 2 кнопки (Да / Нет), код будет

<div id="individualQuestionAnswerContainer155" class="individual-question-answer-container" style="" xpath="7">  Contains 2 options Yes or No
    <div class="individual-questions-count-container"></div>
    <div id="questionContainer155" style="clear: both; float: left;"></div>
    <div id="questionAnswerContainer155" class="answers-container" style="">
        <input type="button" value="Yes" id="Button477" class="btnClass_155 btn-assessment-answer" style="">
        <input type="button" value="No" id="Button478" class="btnClass_155 buttonClicked btn-assessment-answer">
    </div>
</div>

Если вопрос, имеющий текстовую область, код

<div id="questionAnswerContainer38" class="answers-container" xpath="1">
    <textarea maxlength="50000" rows="2" cols="100" id="FreeTextarea38"></textarea>
</div>

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Попробуйте использовать эту структуру. Надеюсь, это поможет.

public void AssessmentTest() throws Exception
        {
        List<WebElement>totalQSN = driver.findElements(By.xpath("//div[@id='assessmentQuestionAnswersContainer']/div"));//Assuming this xpath is correct

        List<WebElement> mainQuestions = driver.findElements(By.xpath("//div[@id='assessmentQuestionAnswersContainer']/div/div[2]/div")); //Assuming this xpath is correct

          System.out.println("The Questions are::");
                for(int i=0; i<totalQSN.size()-5; i++)
                {   
                    System.out.println("QUESTION:- " + mainQuestions.get(i).getText() + "["+ i +"]" );

                    Random rnd = new Random();
                    String webeleTag=totalQSN.get(i).getTagName();

                    if(webeleTag.equals("input"))){

                        String webeleType=totalQSN.get(i).getAttribute("type");

                        switch(webeleType){
                        case:"checkbox":
                        //your code to select check box
                        case:"button":
                        //Only click event on answer
                        default:

                        }   

                    }
                    else if(webeleTag.equals("textarea")){
                    //your code
                    }

                    else{
                    //Not text area,checkbox or radio something else
                    }

            }

        }
0 голосов
/ 20 февраля 2020
  • Чтобы определить, является ли это текстовой областью, из верхней части моей головы вы можете go для .getTagName(), это вернет тег элемента.

  • Чтобы получить все флажки, которые вы можете использовать driver.findElements(By.id("questionAnswerContainer148")).toArray(new WebElement[0]), это вернет массив с флажками, и вы можете использовать некоторые логики c, чтобы щелкнуть нужные элементы из списка.

  • Если да / нет, я думаю, что driver.findElement(by).getAttribute("value") вернет содержимое атрибута.

Надеюсь, это поможет вам.

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