Selenium:在字符串中存放XPATH时无效

时间:2018-09-27 14:06:16

标签: java selenium xpath

我想使用一个函数在屏幕上显示下拉列表的当前值,因为Selenium代码不是很漂亮。

以下内容在我的主脚本中非常有效:

new Select(driver.findElement(By.id("secId:mainBody:vboxlist:s_m9_aa2::content"))).selectByVisibleText(contract.getCreditype());

但是使用该功能不起作用:

writeScreen("Description : ", "secId:mainBody:vboxlist:s_m9_aa2::content");

public void writeScreen(String description, String identifiant) {
            String xpath="//*[@id=\\\""+identifiant+"\\\"]";
            Select select = new Select(driver.findElement(By.xpath(xpath)));
            WebElement option = select.getFirstSelectedOption();
            String defaultItem = option.getText();
            System.out.println(description+defaultItem);

我遇到以下错误:

  

org.openqa.selenium.InvalidSelectorException:无效的选择器:无法   用xpath表达式定位元素   // [@ id = \“ secId:mainBody:vboxlist:s_m9_aa2 :: content \”],因为   出现以下错误:SyntaxError:无法在其上执行“评估”   '文档':字符串   '// [@ id = \“ secId:mainBody:vboxlist:s_m9_aa2 :: content \”]'不是   有效的XPath表达式。

当我检查XPATH时,它与我的第一个工作示例完全相同。

2 个答案:

答案 0 :(得分:1)

您的xpath错误,请按以下方式更改String xpath="//*[@id=\\\""+identifiant+"\\\"]";

String xpath="//*[@id='"+identifiant+"']";

答案 1 :(得分:0)

除非您的xpath错误,可能是因为该元素尚未加载?

因此有时脚本的运行速度会比网页的响应时间快。

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

在搜索xpath之后但在对其进行操作之前添加此行,因此先查找它,然后等待,然后再执行操作,可以为等待添加更多功能,但这将测试是否是问题所在。

    writeScreen("Description : ", "secId:mainBody:vboxlist:s_m9_aa2::content");

public void writeScreen(String description, String identifiant) {
            String xpath="//*[@id=\\\""+identifiant+"\\\"]";
            Select select = new Select(driver.findElement(By.xpath(xpath)));
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            WebElement option = select.getFirstSelectedOption();
            String defaultItem = option.getText();
            System.out.println(description+defaultItem);

您的代码看起来如何

我刚刚注意到的另一个问题,您很可能在xpath中做错了,在将其声明到变量中时,它应该像这样

String xpath="//*[@id=\\\"'+identifiant+'\\\"]";

您这样做的方法是使+ identifiant +一个函数而不是链接到xpath的字符串。