Используя selenium java, я хочу автоматизировать страницу опроса. Проблема возникает с вопросом, содержащим несколько под-вопросов

#java #selenium #testing #automation #cucumber

Вопрос:

Используя selenium java, я хочу автоматизировать страницу опроса. Каждый вопрос имеет один и тот же HTML-код. Проблема возникает с вопросом, содержащим несколько подзадач. Каждый подзапрос содержит один и тот же HTML-код.

Что я пытался сделать? Я старался полагаться на «имя» и «ценность». После завершения работы на кнопке «Продолжить» отобразятся локаторы

 @FindBy(xpath = "//input[@name='select-12'][0]")
    WebElement question10;

    @FindBy(xpath = "//input[@name='select-12'][1]")
    WebElement question10a;

    @FindBy(xpath = "//input[@name='select-12'][2]")
    WebElement question10b;

    @FindBy(xpath = "//input[@name='select-12'][3]")
    WebElement question10c;

    @FindBy(xpath = "//input[@name='select-12'][4]")
    WebElement question10d;

    @FindBy(xpath = "//input[@name='select-12'][5]")
    WebElement question10e;

    @FindBy(xpath = "//input[@name='select-12'][6]")
    WebElement question10f;


    //executor.executeScript("arguments[0].click();", question10);
//        JavascriptExecutor js = (JavascriptExecutor) driver;
//        js.executeScript("window.scrollBy(0,200)", "");
        //executor.executeScript("arguments[0].click();", question10a);
        executor.executeScript("arguments[0].click();", question10b);
        executor.executeScript("arguments[0].click();", question10c);
        executor.executeScript("arguments[0].click();", question10d);
        executor.executeScript("arguments[0].click();", question10e);
        executor.executeScript("arguments[0].click();", question10f);
        executor.executeScript("arguments[0].click();", question11);
        disclaimer.click();
        continua.click();
 

HTML-код страницы:
HTML

Изображение вопроса: Изображение вопроса

Как я могу завершить вопрос?

Комментарии:

1. Можете ли вы поделиться этим html-кодом в текстовом формате здесь или даже URL-адресом страницы, если он общедоступен

2. <метка><метка><класс img=»значок» стиль=»отображение: нет»;> <класс img=»значок» стиль=»отображение: нет»;><тип ввода=»радио» имя=»выбор-12″ значение=»0″> 0 <тип ввода=»радио» имя=»выбор-12″ значение=»0″></метка> </метка><метка><метка><класс img=»значок» стиль=»отображение: нет»;> <класс img=»значок» стиль=»отображение: нет;»><тип ввода=»радио» имя=»выбор-12″ значение=»0″> 0 <тип ввода=»радио» имя=»выбор-12″ значение=»0″></метка>

3. Этого недостаточно HTML, URL страницы, которым вы можете поделиться ?

4. Все под-вопросы идентичны

5. Нет, я вижу, есть a, b, c, d, e, f

Ответ №1:

Заголовок вопроса отличается, например :

 a. Activitati cotidiene si activitati ce tin de locul tau de munca
 

или

 b. Hobiuri si activitati sportive
 

на основе заголовка мы можем различать xpath (приведенный ниже xpath предназначен для первого вопроса):

 //strong[contains(text(), 'a.')]/../descendant::input[@value='0']/..
 

для второго или 3-го вопроса все, что вам нужно сделать, это изменить заголовок вопроса вместо a. этого конкретного заголовка вопроса, например b. , и так далее..

и если вы хотите нажать на 0, то оставьте это как есть input[@value='0'] , но в случае, если вы хотите нажать на 1, 2, 3, или любой другой номер, вам придется изменить номер здесь :

 input[@value='1']
 

или

 input[@value='2']
 

и так далее..

Комментарии:

1. может ли он также быть адаптирован для отказа от ответственности?

2. Что вы имеете в виду под отказом от ответственности ?

3. Я пытаюсь понять правила и логику локаторов.

4. Сработало ли это ? Вам нужна еще какая-нибудь помощь в этом деле ?

Ответ №2:

Если не имеет значения, какой вариант вы выберете, вы можете сделать List<WebElement> «с помощью локатора css» .sub-question .answers:nth-child(6) input и выбрать все элементы в цикле (пример предназначен для выбора варианта ответа » 4 » для каждого подвопроса, вы можете изменить его по своему усмотрению)

 import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import java.util.List;

public class QuestionTenPage {
    WebDriver driver;

    @FindBy(css = ".sub-question .answers:nth-child(6) input")
    private List<WebElement> lastAnswerForSubQuestions;

    public void checkAllSubQuestions() {
        lastAnswerForSubQuestions.forEach(radio -> ((JavascriptExecutor)driver).executeScript("arguments[0].click();", radio));
    }
}