我试图从drodown中选择值。这是我的代码。
driver.findElement(By.xpath(".//*[@id='accountSelectContainer']/span/a/span[1]")).click();
driver.findElement(By.xpath("//ul[@id='ui-id-1']/li/a[equals(text(),'60091 - AFCENT')]")).click();
现在我在这里硬编码了这个值,这很有效但我正在从excel文件中读取我的testdata。所以我没有使用直接硬代码值,而是想在xpath中声明我的testdata并从excel文件中读取它。所以我试着这个: 的努力
public void combobox(String testData)
{
driver.findElement(By.xpath(".//*[@id='accountSelectContainer']/span/a/span[1]")).click();
driver.findElement(By.xpath("//ul[@id='ui-id-1']/li/a[equals(text(),'"+testData+"')]")).click();
}
但我得到了例外
org.openqa.selenium.InvalidSelectorException:无效的选择器:无法使用 使用xpath表达式定位元素 // ul [@id =' ui-id-1'] / li / a [等于(text(),' 60091 - AFCENT')]因为 以下错误:SyntaxError:无法执行'评估'上 '文档':字符串' // ul [@id =' ui-id-1'] / li / a [等于(text(),' 60091 - AFCENT']'不是有效的XPath表达式。
我尝试将其更改为" + testData +"而不是使用'" + testData +"' 但同样的例外。
我也尝试了这段代码:
driver.findElement(By.xpath(".//*[@id='accountSelectContainer']/span/a/span[1]")).click();
List<WebElement> options = driver.findElements(By.xpath("//ul[@id='ui-id-1']/li"));
for (WebElement option : options) {
if(testData.equals(option.getText()))
option.click();
}
工作正常,但在执行此代码之后,它使我的浏览器在执行下一步之前等待大约15秒或者也退出。 我不明白为什么会这样?
请提出建议或任何想法..
答案 0 :(得分:0)
我怀疑你的快速尝试是否完美,因为xpath
没有equals
。你会得到同样的例外。要检查文本是否相等,请使用=
"//ul[@id='ui-id-1']/li/a[text()='"+testData+"']"
您也可以使用contains
"//ul[@id='ui-id-1']/li/a[contains(text(),'"+testData+"')]"
答案 1 :(得分:-1)
首先:您遇到的异常是因为xpath://ul[@id='ui-id-1']/li/a[equals(text(),'60091 - AFCENT')]
语法不正确。
第二:您可以运行的代码不会让您的浏览器等待15秒,这只是因为有关互联网连接或您的计算机的问题有点慢。