首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有CSS操作的WebDriver linkText

具有CSS操作的WebDriver linkText
EN

Stack Exchange QA用户
提问于 2023-04-29 11:53:18
回答 2查看 45关注 0票数 1

我有一个具有以下元素的HTML:

代码语言:javascript
复制
<a href="index.html" style="text-transform: uppercase;">index</a>

我使用selenium-java 4.8.2、Chrome 112和JUnit 5.9.2,并试图通过WebDriver的linkText定位器找到这个元素。

代码语言:javascript
复制
public void testMethod() {
    driver.get("<myUrl>");
    driver.findElement(By.linkText("index")).click();
}

但它不起作用。经过一些调查后,我发现当我将By.linkText("INDEX")替换为By.linkText("index")时,它可以工作,因此它看起来像是在元素找到之前应用了文本转换CSS样式。

另一方面,使用好的旧XPath是有效的。

代码语言:javascript
复制
driver.findElement(By.xpath("//a[text()='index']")).click();

有人对这个话题有什么想法吗?我认为在使用WebDriver使用选择器策略查找元素时,不应该应用CSS转换,但是我找不到有关这个主题的任何显式信息。

EN

回答 2

Stack Exchange QA用户

回答已采纳

发布于 2023-05-01 02:28:33

您所遇到的问题是由于linkText定位器区分大小写,而CSS text-transform: uppercase;应用于<a>标记内的文本。因此,当您试图使用带有小写文本的linkText定位器查找元素时,它将无法找到它。

但是,正如您已经发现的,使用XPath来使用实际文本定位元素很好,因为它不受text-transform CSS样式的影响。

至于在使用选择器策略查找元素时是否应该应用CSS转换,答案是它取决于所使用的定位器策略。一些定位器策略(如linkTextpartialLinkText )依赖于元素的实际文本,而其他策略(如xpathcssSelector )允许您以不区分大小写的方式指定文本或属性值。

在这种情况下,可以使用CSS选择器以不区分大小写的方式使用:contains()伪类定位元素。下面是一个例子:

代码语言:javascript
复制
driver.findElement(By.cssSelector("a:contains('index')")).click();

这将定位包含文本“索引”的<a>标记,而不管其情况如何。

票数 0
EN

Stack Exchange QA用户

发布于 2023-04-29 16:25:35

是的,linkText区分大小写,因此您可以看到NoSuchElementException。

有两种方法可以避免CSS伪元素-

  1. 使用XPath查找元素
  2. 使用Javascript (参考文章- https://www.lambdatest.com/blog/handling-pseudo-elements-in-css-with-selenium/#:~:text=How%20To%20Work%20With%20Pseudo%2DElements%20In%20Selenium%20Java%3F )

在您的例子中,如果您确信CSS转换不会改变。你可以用

代码语言:javascript
复制
driver.findElement(By.linkText(text.toUpperCase()));
票数 0
EN
页面原文内容由Stack Exchange QA提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://sqa.stackexchange.com/questions/51611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档