我想使用一个函数在屏幕上显示下拉列表的当前值,因为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时,它与我的第一个工作示例完全相同。
答案 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的字符串。