小弟不才,刚开始学习 selenium,目前在学习时有个想法是,输入一个产品编号,就可以自动定位到,并去购买操作。现在的问题是,不知道怎么去定位,因为是一个产品列表。如图所示:
我想输入的一个产品编号,然后定位到并去点击立即加入按钮。
下面是元素位置:
public void clickAddByProductNumber(WebDriver driver, String number) {
List<WebElement> dlList = driver.findElements(By.tagName("dl"));
for (WebElement element: dlList) {
// 找到dl下面第一个dt下的第一个span
WebElement productNumberSpan = element.findElement(By.cssSelector("dt span"));
if (productNumberSpan.getText().equals(number)) {
// 找到dl下面第一个dd下的第一个h5下的第一个a标签
element.findElement(By.cssSelector("dd h5 a")).click();
return ;
}
}
}
试试
@Sorin 大神帮帮忙
xpath
//span[contains(text(),'XY18041887953')]/..//a[contains(text(),'立即加入')]
我不知道我写得对不对哦。要不试下?思路时定位下层控件,寻找同级控件。
额,我用 xpath 可以对某一个特定的产品定位,但是我想实现的是我从入口随意输入一个产品,检查这个页面,没有就报错,有的话,定位到,并去点击立即加入按钮。
点开 “按钮” 后是产品详情页面吧 ,详情页页面地址中含有项目编号吧? 直接请求详情页页面地址,别从这点了
//span[contains(text(),ProductNo)]/..//a[contains(text(),'立即加入')]
把 XY18041887953 替换成你要输入产品编码变量 ProductNo 就可以了吧。。。输入一个 ProductNo 以后,检验这个路径的立即加入控件是否存在
public void clickAddByProductNumber(WebDriver driver, String number) {
List<WebElement> dlList = driver.findElements(By.tagName("dl"));
for (WebElement element: dlList) {
// 找到dl下面第一个dt下的第一个span
WebElement productNumberSpan = element.findElement(By.cssSelector("dt span"));
if (productNumberSpan.getText().equals(number)) {
// 找到dl下面第一个dd下的第一个h5下的第一个a标签
element.findElement(By.cssSelector("dd h5 a")).click();
return ;
}
}
}
试试
这个你要使用 xpath 中的轴来定位元素,具体 xpath 轴的使用,你可以去http://www.w3school.com.cn/xpath/xpath_axes.asp了解下