从下拉列表中选择值时出现InvalidSelectorException

时间:2017-07-10 22:11:55

标签: java xpath selenium-webdriver drop-down-menu automated-tests

我试图从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秒或者也退出。 我不明白为什么会这样?

请提出建议或任何想法..

2 个答案:

答案 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秒,这只是因为有关互联网连接或您的计算机的问题有点慢。