在Selenium Java中处理AutoSuggest时获取NullPointer Exception



我正在自动添加到"http://www.fnp.com/the-sweet-surprises-genpr-143431-e.html"网站的卡片过程。我正在使用TestNG POM结构编写代码。我卡在处理自动建议时遇到空指针异常的任务。下面是我的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">

下面的代码将起作用:

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

在单击或发送密钥之前初始化WebElement

WebElement webelement = getDriver().findElement(By.id("tagsf2"));
webelement.sendKeys("gan");

剩下的逻辑似乎是正确的。只要确保你的搜索字段的xpath是正确的。

我认为自动完成会创建一个列表。所以应该是

String xp = "//li[starts-with(text(),'gan')]";
WebDriverWait wait = new WebDriverWait(driver,40 );
wait.until(ExpectedConditions.presenceOfElementsLocated(By.xpath(xp)));

我认为加载自动完成需要时间,但应该有一些延迟,之后您应该尝试找到元素。尝试WebDriverWait并让我知道。

最新更新