Как использовать if..else условие с помощью класса в Selenium - PullRequest
0 голосов
/ 21 апреля 2020

https://i.stack.imgur.com/VMebH.png [https://i.stack.imgur.com/mlHAY.png https://i.stack.imgur.com/a6hoy.png, https://i.stack.imgur.com/9K8nn.png, https://i.stack.imgur.com/SOPbS.png, https://i.stack.imgur.com/UZd5I.png, [введите описание изображения здесь] [2] У меня есть Анкета, и ответы находятся в другой форме, такой как текстовое поле, радиокнопки, флажки или раскрывающийся список. В моем следующем коде выполняется переключение l oop и выбор параметров переключателя, затем выполняется флажок l oop и флажок, а затем текстовое поле, 3 отдельных цикла работают, но это неправильный способ сделать это. Я хочу использовать if..else и для проверки его радио / check / textbox / select..et c.

List<WebElement> radioGroups = driver.findElements(By.xpath("//mat-radio-group[@role='radiogroup']"));
for(int j=0; j<radioGroups.size(); j++)
{
    List<WebElement> radioOptions = radioGroups.get(j).findElements(By.tagName("mat-radio-button"));    
    if (radioOptions.size()>0)
    {   
        Random rnd = new Random();
        WebElement sValue = radioOptions.get(rnd.nextInt(radioOptions.size()));
        Thread.sleep(1000);
        act.moveToElement(sValue).click().build().perform();
    }
}


List<WebElement> totalCheckboxes = driver.findElements(By.xpath("//app-mat-checkbox-group"));
WebElement checkBox =driver.findElement(By.xpath("//mat-checkbox/label/div/input"));
    for(int k=0; k<totalCheckboxes.size(); k++)
    {
        List<WebElement> checkboxOption = totalCheckboxes.get(k).findElements(By.tagName("mat-checkbox"));  
        if (checkboxOption.size()>0)
        {   
            Random rnd = new Random();
            WebElement sValue = checkboxOption.get(rnd.nextInt(checkboxOption.size()));
            act.moveToElement(sValue).click().build().perform();
                }
            }
        }

List<WebElement> textboxes = driver.findElements(By.xpath("//div[@class='input ng-star-inserted']/div/div//div/input"));

    for(int i=0; i<=textboxes.size()-2; i++)
    {
        wait.until(ExpectedConditions.visibilityOf(textboxes.get(i))); 
        if(textboxes.get(i).isEnabled())
        {
            final String getSaltString = getSaltString();
            textboxes.get(i).sendKeys(getSaltString);}
        }
    }

У меня есть xpath, который можно использовать для if.else

//div[@class='answers-container col ng-star-inserted']/div[@class='TextBox']
//div[@class='answers-container col ng-star-inserted']/div[@class='CheckBox']
//div[@class='answers-container col ng-star-inserted']/div[@class='RadioButton']
//div[@class='answers-container col ng-star-inserted']/div[@class='DropDpwnList']

ИЛИ

app-input[@inputtype='text']  
app-radio[@inputtype='radio']  
app-radio[@inputtype='checkbox']  
app-select

Я пытался, если (! Driver.findElements (By.xpath ("// div [@ class = 'контейнер ответов col ng-star-вставлен) '] / div [@ class =' ​​TextBox '] "). isEmpty) {Код TextBox} и так же для других опций, но он не работал.

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

попробуйте это - надеюсь, это поможет.

  List<WebElement>totalAnswer = driver.findElements(By.xpath("//div[contains(@class, 'answers-container')]");//It will have all elements and now traverse through each element

for(int i=0; i<totalAnswer.size(); i++)
{
Random rnd = new Random();

String webeleTag=totalAnswer.get(i).getAttribute("inputtype");
//you can use switch case as well instead of If else

if (webeleTag.equals("radio")){
List<WebElement> radioOptions = totalAnswer.get(i).findElements(By.tagName("mat-radio-button"));    
    if (radioOptions.size()>0)
    {   
       WebElement sValue = radioOptions.get(rnd.nextInt(radioOptions.size()));
        Thread.sleep(1000);
        act.moveToElement(sValue).click().build().perform();
    }

}
else if (webeleTag.equals("checkbox")){
List<WebElement> checkboxOption = totalAnswer.get(i).findElements(By.tagName("mat-checkbox"));  
        if (checkboxOption.size()>0)
        {   

            WebElement sValue = checkboxOption.get(rnd.nextInt(checkboxOption.size()));
            act.moveToElement(sValue).click().build().perform();
                }
            }
        }

}

else if(webeleTag.equals("text")){
wait.until(ExpectedConditions.visibilityOf(totalAnswer.get(i))); 
        if(totalAnswer.get(i).isEnabled())
        {
            final String getSaltString = getSaltString();
            textboxes.get(i).sendKeys(getSaltString);}
        }
}
else{
//if you want to add anything here
}
0 голосов
/ 21 апреля 2020
 List<WebElement> answers = driver.findElements(By.cssSelector("div.answers-container.col.ng-star-inserted div"));

      for(int i = 0;i<answers.size();i++)
      {
          Random rnd = new Random();
          String answerType= answers.get(i).getAttribute("class");
          if(answerType.equals("DropDpwnList"))
          {
              WebElement dropdownOptions = answers.get(i).findElement(By.xpath("//div[@class='select-box']/select"));
              Select options=new Select(dropdownOptions);
              int totalOptions= options.getOptions().size();
              options.selectByIndex(rnd.nextInt(totalOptions));

          }
          elseif(answerType.equals("TextBox"))
          { 
              final String getSaltString = getSaltString();
               WebElement textbox = answers.get(i).findElement(By.xpath("//input[@type='text']"));
              wait.until(ExpectedConditions.elementToBeClickable(textbox)); 
              textbox.sendKeys(getSaltString);
          }

          elseif(answerType.equals("RadioButton"))
          {
              List<WebElement> radioOptions = answers.get(i)
                      .findElements(By.tagName("mat-radio-button"));
              if(radioOptions.size()>0)
              {
                  WebElement sValue = radioOptions.get(rnd.nextInt(radioOptions.size()));
                  Thread.sleep(1000);
                  act.moveToElement(sValue).click().build().perform();
              }}
          elseif(answerType.equals("CheckBox"))
          {
              List<WebElement> checkboxOption = answers.get(i).findElements(By.tagName("mat-checkbox"));
              if(checkboxOption.size()>0)
              {
                  WebElement sValue = checkboxOption.get(rnd.nextInt(checkboxOption.size()));
                  act.moveToElement(sValue).click().build().perform();
              }}
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...