Java 硒检查动态元素
Selenium/Java 任务是获取两个可能元素的文本:elem1和elem2。 当显示场景A-elem1时,elem2的定位器不存在。反之亦然 我的代码: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
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]中不存在。您是否尝试使用上述代码?