求 selenium By.xpath 包含变量 解决方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求 selenium By.xpath 包含变量 解决方案相关的知识,希望对你有一定的参考价值。

各位大侠, 请帮忙看看这个问题
我用java 写 selenium By.xpath 元素定位, 遇到 xpath 里面包含有变动的ID, 想通过 动态获取该ID 先转成string 再通过By.xpath 来定位, 编译报错 无法定位.
代码如下:
String tmp = "\"" + "//span[@class='bigbtn' and @eid='" + ID +"']" + "\"";
WebElement Bigbtn = driver.findElement(By.xpath(tmp));
异常如下:
Exception in thread "main" org.openqa.selenium.InvalidSelectorException: The given selector "//span[@class='bigbtn' and @eid='123']" is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Unable to locate an element with the xpath expression "//span[@class='bigbtn' and @eid='123']" because of the following error:
[Exception... "The expression cannot be converted to return the specified type." code: "0" nsresult: "0x805b0034 (TypeError)" location: "<unknown>"]
若直接写 常量的内容, 是可以定位的

参考技术A 这个异常是表示你的xpath表达式有误,把"\"" 去掉试试

Selenium WebDriver findElement(By.xpath())不适合我

我已经通过xpath教程并检查了许多其他帖子,因此我不确定我缺少什么。我只是想通过xpath找到以下元素:

<input class="t-TextBox" type="email" test-id="test-username"/>

我尝试了很多东西,例如:

element = findElement(By.xpath("//[@test-id='test-username']"));

错误是Expression is not a legal expression

我在MacBook上使用Firefox

任何建议将不胜感激。

答案
element = findElement(By.xpath("//*[@test-id='test-username']");
element = findElement(By.xpath("//input[@test-id='test-username']");

(*) - 任何标记名

另一答案

您应该在xpath中添加标记名称,如:

element = findElement(By.xpath("//input[@test-id='test-username']");
另一答案

你的语法完全错误....你需要给驱动程序提供findelement

你的代码将是:

WebDriver driver = new FirefoxDriver();
WebeElement element ;

element = driver.findElement(By.xpath("//[@test-id='test-username']"); 

//你的xpath是:"//[@test-id='test-username']"

我建议试试这个:"//*[@test-id='test-username']"

另一答案

你错过了最后的右括号:

element = findElement(By.xpath("//[@test-id='test-username']"));
另一答案

只需要在xpath的开头添加*并最后关闭括号。

element = findElement(By.xpath("//*[@test-id='test-username']"));
另一答案

您尚未指定要尝试进行绝对xpath搜索的html元素类型。在您的情况下,它是输入元素。

试试这个:

element = findElement(By.xpath("//input[@class='t-TextBox' and @type='email' and @test-    
id='test-username']");
另一答案

正确的Xpath语法如下:

//tagname[@value='name']

所以你应该写这样的东西:

findElement(By.xpath("//input[@test-id='test-username']"));
另一答案

你也可以使用包含:

element = findElement(By.xpath("//input[contains (@test-id,"test-username")]");

以上是关于求 selenium By.xpath 包含变量 解决方案的主要内容,如果未能解决你的问题,请参考以下文章

selenium的定位方式

如何使用 JUnit 断言元素包含 Selenium 中的文本

Java + selenium 元素定位之By Xpath

Selenium WebDriver findElement(By.xpath())不适合我

Python selenium PO By.XPATH定位元素报错

在 Selenium 测试中使用 XPath 通过文本获取 WebElement