我正在自动添加到"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并让我知道。