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 个按钮具有相同的文本。
它们之间的唯一区别是路由器链接,我不知道如何调用。我已经尝试过使用链接文本和部分链接文本,但没有结果。
【问题讨论】:
你试过 cssdiv:[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 元素有时存在 有时不存在,怎么处理
java+selenium,请问该如何定位#shadow-root里面的元素?