Selenium Webdriver - 无法在页面 refresh/redirect 后找到元素

Selenium Webdriver - Unable to find element after page refresh/redirect

我正在尝试为 SAP-webUI(基于 Web 的)应用程序编写一些 UI 测试用例。登录后,它会显示仪表板(Workcenter 的)屏幕。

现在的问题是,我可以打开页面,输入U/N,Pwd 并通过Selenium 登录。在我按下 "Login" 按钮后,URL 发生变化,页面变为 redirected/refreshed。

例如URL 登录前:https://a/b/c/d/e/f/g.htm?sap-client=001&sap-sessioncmd=open

例如URL 登录成功后:https://a/b(bDsdfsdsf1lg==)/c/d/e/f/g.htm

此后我无法执行任何操作或在页面的任何部分按任何 link。我尝试了所有可能的属性( css, xpath, id )。 Webdriver 无法在页面上找到任何元素。它单独显示错误 "No element found"。

我正在使用 java 和 Selenium Web 驱动程序。

请找出以下网页的html结构

<html><body><div><div><iframe>#document<html><head></head><frameset><frameset><frame>#document<html><head></head><body><form><div><div><table><tbody><tr><td><div><ul><li><a id=abcdef></a></li></ul></div></td></tr></tbody></table></div></div></form></body></html></frame></frameset></frameset></html></iframe></div></div></body></html>

实际上我想单击一个 link 菜单 "abcd",它位于 iframe 和框架内,如下面 HTML 代码

所示

<html><head></head><body><iframe name=a1><html><head></head><frameset><frameset name=fs1><frame name=f1><html><head></head><body><table><tbody><tr><td><ul><li><a id=abcdef>

我也尝试了下面的代码。

driver.switchTo().frame("a1"); driver.findElement(By.id("abcd")).click();

driver.findElement(By.xpath("//*[@id='abcd']")).click();

使用上面的代码后,仍然报错"No such element"

求推荐

此致, 湿婆

这是 因为 iframe。您需要先切换到它:

driver.switchTo().frame(0);
driver.findElement(By.id("abcdef")).click();

其中 0 是帧索引。

这样做...

driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@name='a1']"))); // switching to iframe

接着是

driver.switchTo().frame("f1"); // switch to frame

然后是您想要的操作...

driver.findElement(By.id("abcd")).click();

参见有关隐式等待的文档here

我猜你应该隐式等待直到你选择的元素可用

修改这些代码以适合您选择的元素:

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));