我是Selenium的新手。 我一直在寻找所有可能的方法来解决此问题(此刻我认为这是无法解决的),我有一个网页(无法共享),其中包含以下输入内容:
/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[3]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td/div/iframe/#document/html/body/div[2]/div/iframe/#document/html/frameset/frame/#document/html/frameset/frameset/frameset/frame/#document/html/body/div/form/table/tbody/tr[2]/td[2]/input
(如您所见,结构混合了框架,iframe和框架集;其中一些具有id,而其他名称则没有)
问题是Selenium无法通过任何方法找到元素 测试过
。首先,我尝试了一个简单的driver.findElement(By。all of them
)
在他们不工作之后,我开始在网络上浏览并且找不到为什么我无法解决这个问题。
这是网页中唯一的输入,并且具有id作为属性,因此应该很容易。
This is the class where I have been trying to make it work,如果您想查看我失败的工作,我将最后的努力集中在尝试次数8上。。
正如您所看到的,我一直在尝试通过几种方式来获得它,框架确实是一个问题,但这不是它们,也不是等待。
真的没有办法获得这个元素吗?是其中一种情况 硒不能在哪里自动化?或者是我丢失了一些东西。
对象是可见的,甚至没有滚动条,整个页面完全适合屏幕,Xpath是我测试的第一选择之一,没有用
谢谢。
答案 0 :(得分:0)
我不知道这是否是问题,但是您尝试使用的元素是可见的还是需要滚动才能查看?如果看不见,请尝试使用它滚动一点:
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.scrollBy(0,1000)");
另一种可能的解决方案是尝试使用绝对xpath而不是相对的。有几种工具可以找到html页面中元素的绝对xpath。然后您可以使用
driver.findElement(By.xpath(absoluteXpath));
答案 1 :(得分:0)
经过大量尝试,我意识到硒在最后一个switchTo切换到另一个帧。这可能是一个错误,但是我修改了最后一次切换到而不是
的方式 var wait = (new WebDriverWait(driver, secsToWait));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(frameNameOrId));
收件人
driver.switchTo().frame(driver.findElement(By.xpath("//frame[@"+attribute+"='"+frameNameOrId+"']")));
因此它终于可以正常工作并正常获取输入了。