Java 硒检查动态元素

Java 硒检查动态元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,Selenium/Java 任务是获取两个可能元素的文本:elem1和elem2。 当显示场景A-elem1时,elem2的定位器不存在。反之亦然 我的代码: public void checkTextInPopUp() { List<WebElement> commonDiv= driver.findElements(By.xpath(".//* [@id='CheckStockProductAvailabilityWidget']/div/div")); i

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();            
    }
}
public void checktextinpoup(){
List commonDiv=driver.findElements(By.xpath(“./*
[@id='CheckStockProductAvailabilityWidget']/div/div”);
如果(commonDiv.size()>=1){
addToCartStock.click();
}否则{
System.out.println(driver.findElement(By.id(“ajaxErrorMsg”)).getText();
closeCheckStock.click();
}
}
我的代码总是只在场景1中工作,当element2被释放时失败,代码是:找不到element2

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>

Price& 无法对您的订单执行可用性检查

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">

第00000部分


这两个元素都有一个公共值,在获取元素时都返回“1”。size

您可以按如下方式修改代码

代码:

    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());
        }
    }
}
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());
}

我已经用try-and-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();
    }
}

是否要从元素1中提取“无法为您的订单执行价格和可用性检查”文本,以及从元素2 html中提取“Part#00000”文本?类似于:if(“无法为您的订单执行价格和可用性检查”。isDispayed){do this}else{获取元素“Part#00000”文本.但当显示第一个文本时,另一个文本(第00000部分)不存在。好的。因此,我假设,在任何时候,我们都可以看到元素1 html或元素2 html并更新应答。根元素的大小始终为1,因此它将始终在if之后执行语句,并忽略else。否。我没有获取根元素的大小。使用根元素,我将获取列表中的元素1(Xpath-->“//div[@class='span11']]/p”)。这称为链式搜索。如果元素1可用,则element1List.size()将为1,否则为0。此代码将在没有任何issue@Y_Sh:我已更新了答案中的详细信息。请使用Xpath-->“//div[@class='span11']/p不是要获取的元素。元素2显示后,元素1将不存在。我需要在一个条件下使用这两个元素:如果元素1显示,则执行此操作,否则获取元素2文本并执行此操作。是的。我想,您没有理解我的意思。元素1显示在span11类中,标记为p。但在元素中ent 2 HTML,P标记在div标记[Span 11 class]中不存在。您是否尝试使用上述代码?