Selenium with Java:我找不到元素并单击它

Posted

技术标签:

【中文标题】Selenium with Java:我找不到元素并单击它【英文标题】:Selenium with Java: I can't find and element and click it 【发布时间】:2021-12-26 17:25:55 【问题描述】:

这是我需要点击的页面的按钮:

<div _ngcontent-jnk-c107="" class="btn btn-primary btn-outline" tabindex="0" ng-reflect-router-link="/opportunity/1">VIEW</div>

我无法在定位器中使用文本 view,因为同一页面中还有其他 22 个按钮具有相同的文本。

它们之间的唯一区别是路由器链接,我不知道如何调用。我已经尝试过使用链接文本和部分链接文本,但没有结果。

【问题讨论】:

你试过 css div:[ng-reflect-router-link='/opportunity/1'] 吗? driver.findElement(By.cssSelector("div:[ng-reflect-router-link='/opportunity/1']")).click();我试过这条线,它说“无效的选择器” 对不起,请删除冒号:, driver.findElement(By.cssSelector("div[ng-reflect-router-link='/opportunity/1']")) 【参考方案1】:

相对于 ng-reflect-router-link 属性,对于文本为 VIEW 的元素上的 click(),您可以使用以下任一方法Locator Strategies:

使用cssSelector

driver.findElement(By.cssSelector("div.btn.btn-primary.btn-outline[ng-reflect-router-link='/opportunity/1']")).click();

使用xpath

driver.findElement(By.xpath("//div[@class='btn btn-primary btn-outline' and @ng-reflect-router-link='/opportunity/1']")).click();

但是,由于该元素是Angular 元素,因此要在该元素上为click() 诱导WebDriverWait 为elementToBeClickable() 并且您可以使用以下Locator Strategies 之一:

使用cssSelector

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.btn.btn-primary.btn-outline[ng-reflect-router-link='/opportunity/1']"))).click();

使用xpath

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='btn btn-primary btn-outline' and @ng-reflect-router-link='/opportunity/1']"))).click();

【讨论】:

【参考方案2】:

如果 ng-reflect-router-link 属性值对于此元素是唯一的,您可以使用以下 XPath 定位器:

//div[@ng-reflect-router-link='/opportunity/1']

【讨论】:

我试过 driver.findElement(By.xpath("div[@ng-reflect-router-link='/opportunity/1']")).click();它仍然说“找不到元素” 也许你错过了这个命令之前的等待/延迟?尝试在它前面加上Thread.sleep(5000); 之类的东西,看看它是否解决了问题。

以上是关于Selenium with Java:我找不到元素并单击它的主要内容,如果未能解决你的问题,请参考以下文章

Selenium webdriverwait(.text_to_be_present_in_element 没有)似乎工作,我找不到任何解决方案

selenium+java 元素有时存在 有时不存在,怎么处理

使用 Selenium 确定印刷媒体元素的可见性

java+selenium,请问该如何定位#shadow-root里面的元素?

Selenium with Python 003 - 页面元素定位

java selenium怎么等待元素出现并设置一定时间