在Selenium Java中处理AutoSuggestion时获取NullPointer异常

时间:2016-01-22 05:33:49

标签: java selenium

我正在自动添加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">

3 个答案:

答案 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是正确的。