Селен проверить динамические элементы - PullRequest
0 голосов
/ 30 мая 2018

Selenium / Java

задача состоит в том, чтобы получить текст двух возможных элементов: elem1 и elem2.Когда отображается сценарий A - elem1, а локатор elem2 не существует.И наоборот.

Мой код:

 public void checkTextInPopUp() {
    List<WebElement> commonDiv= driver.findElements(By.xpath(".//* 
[@id='CheckStockProductAvailabilityWidget']/div/div"));

    if (commonDiv.size()>=1) {

        addToCartStock.click();         

    } else {

System.out.println(driver.findElement(By.id("ajaxErrorMsg")).getText());
        closeCheckStock.click();            
    }
}

Мой код всегда работает только в сценарии 1 и не работает, когда отображается элемент 2, говоря: невозможно найти элемент 2.

Elem1 html:

    <div id="CheckStockProductAvailabilityWidget" class="dijitContentPane" 
lang="en" controllerid="CheckStockProductAvailabilityController" 
widgetid="CheckStockProductAvailabilityWidget" 
dojotype="wc.widget.RefreshArea" style="">
      <div class="row-fluid">
         <div class="span11">
            <p id="ajaxErrorMsg" class="error-font-color">Price & 
Availability Check cannot be executed for your order.</p>
         </div>
     </div>
  </div>
</div>

Elem2 html:

<div id="CheckStockProductAvailabilityWidget" class="dijitContentPane" 
lang="en" controllerid="CheckStockProductAvailabilityController" 
widgetid="CheckStockProductAvailabilityWidget" 
dojotype="wc.widget.RefreshArea" style="">
<div class="row-fluid">
  <div class="span11">
    <div class="row-fluid ">
       <div class="span12">

              Part# 00000
             <br/>
             <p>
        </div>
      </div>
  <div class="row-fluid space-bottom">
  <div class="row-fluid ">
  <div class="row-fluid mobile-inline-block">

Оба элемента имеют общее, и оба возвращают «1» при получении element.size

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Я нашел решение, используя try и catch.Посмотрим, будет ли он идеальным.

public void getStockPopUpMessage() {

    try {
        driver.findElement(By.xpath(".//*[@id='ajaxErrorMsg']"));
        System.out.println("Stock displays: " + 
        driver.findElement(By.xpath(".//*[@id='ajaxErrorMsg']")).getText());
        closeCheckStock.click();
    } catch (NoSuchElementException e) {
        System.out.println("No ajax");
        dothis();
    }
}
0 голосов
/ 30 мая 2018

Вы можете изменить код, как показано ниже

Код:

    public void checkTextInPopUp(){

        WebElement rootElement=driver.findElement(By.id("CheckStockProductAvailabilityWidget"));
        List<WebElement> element1List=rootElement.findElements(By.xpath(".//div[@class='span11']/p"));

        if (element1List.size()==1) {
            ---Do your stuff----
            addToCartStock.click();
        } else {
            System.out.println(rootElement.findElement(By.xpath(".//div[@class='span12']")).getText());
        }
    }
}

Подробности:

  1. Найдите корневой веб-элемент.Поскольку этот элемент всегда виден как в элементе 1, так и в элементе 2, HTML
  2. Элемент 1 может или не может быть виден одновременно.Чтобы избежать NoSuchElementException, найдите элемент с помощью findElements Method и сохраните элемент в List (Вы можете найти элемент с помощью корневого элемента)
  3. Если элемент 1 равен found ,тогда элемент 1 будет виден, а размер элемента 1 будет равен 1.
  4. Если элемент 1 не найден , то элемент 2 будет видимым, а размер элемента 1 будет равен 0.* Логика
  5. может быть добавлена ​​в зависимости от размера элемента

Обновленный код:

List<WebElement> elementList=driver.findElements(By.xpath("//p[@id='ajaxErrorMsg']"));
//If the element 1 html is present, then element list size will be 1, else it will be 0.
if(elementList.size()>0){
    //element 1 related stuff
    ---Do your stuff----
            addToCartStock.click();
}
else{
    //element 2 related stuff
    System.out.println(rootElement.findElement(By.xpath(".//div[@class='span12']")).getText());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...