我正在自动添加“http://www.fnp.com/the-sweet-surprises-genpr-143431-e.html”网站的卡片处理流程。我正在编写代码使用 TestNG POM 结构。我得到了Stuck in task,我在处理Autosuggestion时遇到 NullPointer Exception 。以下是我的POM课程
public class productPage_POM {
public WebDriver driver;
@FindBy(id="tagsf2")
private WebElement city_txtbox;
public productPage_POM(WebDriver driver)
{
PageFactory.initElements(driver, this);
}
public void sel_adr()
{
city_txtbox.sendKeys("gan"); // on this line i am gettign nullpointer Exception
String xp = "//a[starts-with(text(),'gan')]";
List<WebElement> allList = driver.findElements(By.xpath(xp));
int count = allList.size();
System.out.println(count);
for (int i = 0; i < count ; i++)
{
String name = allList.get(i).getText();
System.out.println(name);
if(name.contains("Gandhinagar"))
{
allList.get(i).click();
break;
}
}
下面是HTML结构
<div class="pro_detail">
<div id="changeImage" class="pro_detail_image">
<div class="pro_detail_title">
<div class="pro_detail_size">
<div class="pro_detail_form">
<input id="cityIdHidden" type="hidden" value="CITY-1219">
<input id="hasShippingOption" type="hidden" value="">
<input id="cityIdHidden1" type="hidden" value="">
<input id="liCount" type="hidden" value="1">
<div id="hiddenField">
<div class="pro_detail_form_inn">
<label>1. Where do you want to deliver this?</label>
<input id="tagsf2" class="inp_pro_detail2 election ui-autocomplete-input" type="text" value="Enter City" onchange="showAddtocart();" onblur="WatermarkOnblur('Enter City','tagsf2');shippingOption();" onfocus="WatermarkOnfocus('Enter City','tagsf2')" autocomplete="off">
<span class="ui-helper-hidden-accessible" role="status" aria-live="polite">CITY-1219</span>
<div class="clear"></div>
<div id="cityNotAvailable" class="error_message hide" style="display: none;">
</div>
<div class="textbox">
</div>
<div class="pro_detail_form">
<div id="divDeliveryText" class="pro_detail_form" style="display:none;">
<div id="valentineCatalougueText" class="pro_detail_form" style="display:block;">
<div class="pro_detail_form">
答案 0 :(得分:1)
以下代码可以使用:
String xp = "//ul/li/a[@class='ui-corner-all']";
List<WebElement> allList = driver.findElements(By.xpath(xp));
int count = allList.size();
System.out.println(count);
for (int i = 0; i < count ; i++)
{
String name = allList.get(i).getText();
System.out.println(name);
if(name.contains("Gandhinagar"))
{
allList.get(i).click();
break;
}
}
答案 1 :(得分:0)
我认为自动填充会创建一个列表。所以它应该是
String xp = "//li[starts-with(text(),'gan')]";
WebDriverWait wait = new WebDriverWait(driver,40 );
wait.until(ExpectedConditions.presenceOfElementsLocated(By.xpath(xp)));
我认为加载自动完成需要一些时间,但应该有一些延迟,之后你应该尝试找到这些元素。尝试 WebDriverWait 并告诉我们。
答案 2 :(得分:0)
在点击或发送密钥之前初始化WebElement
。
WebElement webelement = getDriver().findElement(By.id("tagsf2"));
webelement.sendKeys("gan");
剩下的逻辑似乎是正确的。只需确保您的suggetion字段的xpath是正确的。